讓 計算機 將 數學 公式 表達式 的計算過程繪制出來 【mathematical-expression(MAE)】

目錄

文章目錄

  • 目錄
    • 介紹
    • 開始實戰
        • 引入數學表達式計算庫
        • 引入流程圖代碼生成庫
        • 開始進行生成

介紹

大家好 今天我們來分享一個新知識,將數學表達式的整個計算過程,以及計算繁多結果在 Java 中繪制出來,計算機中的數學表達式計算的功能很常見了,但是今天我們要使用一個工具,它可以將 整個計算過程 使用 Java 繪制成為 mermaid 的流程圖!!!

開始實戰

在這里插入圖片描述

引入數學表達式計算庫

mathematical-expression 庫是一個專注于進行數學解析的庫 它具有 Java Python C++ 三種 API,在最近發布的 Java 版本中,提供了數學表達式的解析功能,接下來我們就來引入一下吧!!

<dependency><groupId>io.github.BeardedManZhao</groupId><artifactId>mathematical-expression</artifactId><version>1.3.5</version>
</dependency>
引入流程圖代碼生成庫

您只需要導入下面的依賴坐標就可以自動實現相關組件的導入。這個庫將會幫助您將計算組件的計算過程繪制成一個流程圖。

<dependency><groupId>io.github.BeardedManZhao</groupId><artifactId>varFormatter</artifactId><version>1.0.4</version>
</dependency>
開始進行生成

導入了庫之后,我們就可以像下面一樣進行生成流程圖。

import core.Mathematical_Expression;
import core.calculation.Calculation;
import core.container.LogResults;
import exceptional.WrongFormat;
import top.lingyuzhao.varFormatter.core.VarFormatter;public class MAIN {public static void main(String[] args) throws WrongFormat {// 獲取到一個有括號計算組件 您可以根據需求更換組件final Calculation instance = Mathematical_Expression.getInstance(Mathematical_Expression.bracketsCalculation2);// 然后進行一個簡單的檢查 這里我們要查詢 1 + 2 ^ 4 - 2 * 3 + 2 的執行過程final String s = "1 + 2 ^ (2 + (10 - 7)) * 3 + 2";instance.check(s);// 我們可以通過 explain 獲取到執行過程 它會返回一個對象 這個對象中有一個 result 字段 這個字段就是計算出來的結果final LogResults explain = instance.explain(s, true);System.out.println("計算結果:" + explain.getResult());// 事實上 LogResults 更大的作用是進行執行過程可視化 下面就是一個例子// 設置輸出圖的時候不拼接名字,因為在這里有很多的變量 需要進行關聯的!拼接名字就不好關聯了explain.setNameJoin(false);// 通過我們引入的 VarFormatter 可以很方便地進行格式化 我們在這里格式化為 MERMAID 圖 代碼System.out.println("graph LR");System.out.println(VarFormatter.MERMAID.getFormatter(true).format(explain));}
}

程序運行之后的結果如下所示

E:\RunTime\jdk8\jdk-8u351\bin\java.exe "-javaagent:D:\Liming\MyApplication\IntelliJ_IDEA\IntelliJ IDEA 2021.3.2\lib\idea_rt.jar=52509:D:\Liming\MyApplication\IntelliJ_IDEA\IntelliJ IDEA 2021.3.2\bin" -Dfile.encoding=UTF-8 -classpath E:\RunTime\jdk8\jdk-8u351\jre\lib\charsets.jar;E:\RunTime\jdk8\jdk-8u351\jre\lib\deploy.jar;E:\RunTime\jdk8\jdk-8u351\jre\lib\ext\access-bridge-64.jar;E:\RunTime\jdk8\jdk-8u351\jre\lib\ext\cldrdata.jar;E:\RunTime\jdk8\jdk-8u351\jre\lib\ext\dnsns.jar;E:\RunTime\jdk8\jdk-8u351\jre\lib\ext\jaccess.jar;E:\RunTime\jdk8\jdk-8u351\jre\lib\ext\jfxrt.jar;E:\RunTime\jdk8\jdk-8u351\jre\lib\ext\localedata.jar;E:\RunTime\jdk8\jdk-8u351\jre\lib\ext\nashorn.jar;E:\RunTime\jdk8\jdk-8u351\jre\lib\ext\sunec.jar;E:\RunTime\jdk8\jdk-8u351\jre\lib\ext\sunjce_provider.jar;E:\RunTime\jdk8\jdk-8u351\jre\lib\ext\sunmscapi.jar;E:\RunTime\jdk8\jdk-8u351\jre\lib\ext\sunpkcs11.jar;E:\RunTime\jdk8\jdk-8u351\jre\lib\ext\zipfs.jar;E:\RunTime\jdk8\jdk-8u351\jre\lib\javaws.jar;E:\RunTime\jdk8\jdk-8u351\jre\lib\jce.jar;E:\RunTime\jdk8\jdk-8u351\jre\lib\jfr.jar;E:\RunTime\jdk8\jdk-8u351\jre\lib\jfxswt.jar;E:\RunTime\jdk8\jdk-8u351\jre\lib\jsse.jar;E:\RunTime\jdk8\jdk-8u351\jre\lib\management-agent.jar;E:\RunTime\jdk8\jdk-8u351\jre\lib\plugin.jar;E:\RunTime\jdk8\jdk-8u351\jre\lib\resources.jar;E:\RunTime\jdk8\jdk-8u351\jre\lib\rt.jar;G:\MyGithub\mathematical-expression\target\test-classes;G:\MyGithub\mathematical-expression\target\classes;G:\RunTime\MAVEN\MAVEN_BASE\org\apache\logging\log4j\log4j-slf4j-impl\2.20.0\log4j-slf4j-impl-2.20.0.jar;G:\RunTime\MAVEN\MAVEN_BASE\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;G:\RunTime\MAVEN\MAVEN_BASE\org\apache\logging\log4j\log4j-api\2.20.0\log4j-api-2.20.0.jar;G:\RunTime\MAVEN\MAVEN_BASE\org\apache\logging\log4j\log4j-core\2.20.0\log4j-core-2.20.0.jar;G:\RunTime\MAVEN\MAVEN_BASE\io\github\BeardedManZhao\varFormatter\1.0.4\varFormatter-1.0.4.jar MAIN
[INFO][Calculation Management][24-05-13:06]] : +============================== Welcome to [mathematical expression] ==============================+
[INFO][Calculation Management][24-05-13:06]] : + 	Start time Mon May 13 18:20:27 CST 2024
[INFO][Calculation Management][24-05-13:06]] : + 	version: 1.35
[INFO][Calculation Management][24-05-13:06]] : + 	Calculation component manager initialized successfully
[INFO][Calculation Management][24-05-13:06]] : + 	For more information, see: https://github.com/BeardedManZhao/mathematical-expression.git
[INFO][Calculation Management][24-05-13:06]] : +--------------------------------------------------------------------------------------------------+
[INFO][Calculation Management][24-05-13:06]] : A computing component is registered PrefixExpressionOperation
[INFO][Calculation Management][24-05-13:06]] : A computing component is registered bracketsCalculation2
計算結果:99.0
graph LR
f_-1523352178("1 + 2 ^ (2 + (10 - 7)) * 3 + 2")
f_-1523352178==Map>Map==>f_1563255009
f_1563255009("2 + (10 - 7)")
f_1563255009==Map>Map==>f_1448155011
f_1448155011("10 - 7")
f_1448155011==Map>Map==>f_1507337
f_1507337("10-7+0")
f_1507337==Map>Map==>f_1507337_優先f_1507337_優先==Map>Map==>f_1571371271_計算
f_1571371271("10.0 - 7.0")
f_1571371271_計算==Map>String/Number==>f_1571371271
f_1571371271--Map>value-->f_1571371271v{"3.0"}
f_1571371271_計算==Map>Map==>f_1507337_最終f_1507337_最終==Map>Map==>f_1481348562_計算
f_1481348562("3.0 + 0.0")
f_1481348562_計算==Map>String/Number==>f_1481348562
f_1481348562--Map>value-->f_1481348562v{"3.0"}
f_1481348562_計算==Map>String/Number==>result
result--Map>value-->resultv{"3.0"}
f_1507337==Map>Map==>f_1507337_最終f_1507337_最終==Map>Map==>f_1481348562_計算
f_1481348562("3.0 + 0.0")
f_1481348562_計算==Map>String/Number==>f_1481348562
f_1481348562--Map>value-->f_1481348562v{"3.0"}
f_1481348562_計算==Map>String/Number==>result
result--Map>value-->resultv{"3.0"}
f_1563255009==Map>Map==>f_47507548
f_47507548("2+3.0+0")
f_47507548==Map>Map==>f_47507548_優先f_47507548_優先==Map>Map==>f_-1006161388_計算
f_-1006161388("2.0 + 3.0")
f_-1006161388_計算==Map>String/Number==>f_-1006161388
f_-1006161388--Map>value-->f_-1006161388v{"5.0"}
f_-1006161388_計算==Map>Map==>f_47507548_最終f_47507548_最終==Map>Map==>f_-2133560364_計算
f_-2133560364("5.0 + 0.0")
f_-2133560364_計算==Map>String/Number==>f_-2133560364
f_-2133560364--Map>value-->f_-2133560364v{"5.0"}
f_-2133560364_計算==Map>String/Number==>result
result--Map>value-->resultv{"5.0"}
f_47507548==Map>Map==>f_47507548_最終f_47507548_最終==Map>Map==>f_-2133560364_計算
f_-2133560364("5.0 + 0.0")
f_-2133560364_計算==Map>String/Number==>f_-2133560364
f_-2133560364--Map>value-->f_-2133560364v{"5.0"}
f_-2133560364_計算==Map>String/Number==>result
result--Map>value-->resultv{"5.0"}
f_-1523352178==Map>Map==>f_-418786079
f_-418786079("1+2^5.0*3+2+0")
f_-418786079==Map>Map==>f_-418786079_優先f_-418786079_優先==Map>Map==>f_-959059895_計算
f_-959059895("2.0 ^ 5.0")
f_-959059895_計算==Map>String/Number==>f_-959059895
f_-959059895--Map>value-->f_-959059895v{"32.0"}
f_-959059895_計算==Map>Map==>f_1855628224_計算
f_1855628224("32.0 * 3.0")
f_1855628224_計算==Map>String/Number==>f_1855628224
f_1855628224--Map>value-->f_1855628224v{"96.0"}
f_1855628224_計算==Map>Map==>f_2037586494_計算
f_2037586494("96.0 + 2.0")
f_2037586494_計算==Map>String/Number==>f_2037586494
f_2037586494--Map>value-->f_2037586494v{"98.0"}
f_2037586494_計算==Map>Map==>f_-418786079_最終f_-418786079_最終==Map>Map==>f_-929530109_計算
f_-929530109("1.0 + 98.0")
f_-929530109_計算==Map>String/Number==>f_-929530109
f_-929530109--Map>value-->f_-929530109v{"99.0"}
f_-929530109_計算==Map>String/Number==>result
result--Map>value-->resultv{"99.0"}
f_-418786079==Map>Map==>f_-418786079_最終f_-418786079_最終==Map>Map==>f_-929530109_計算
f_-929530109("1.0 + 98.0")
f_-929530109_計算==Map>String/Number==>f_-929530109
f_-929530109--Map>value-->f_-929530109v{"99.0"}
f_-929530109_計算==Map>String/Number==>result
result--Map>value-->resultv{"99.0"}進程已結束,退出代碼為 0

程序運行之后的結果中有 mermaid 的圖代碼,我們在下面將其展示了出來 供大家觀看!

Map>Map
Map>Map
Map>Map
Map>Map
Map>Map
Map>String/Number
Map>value
Map>Map
Map>Map
Map>String/Number
Map>value
Map>String/Number
Map>value
Map>Map
Map>Map
Map>String/Number
Map>value
Map>String/Number
Map>value
Map>Map
Map>Map
Map>Map
Map>String/Number
Map>value
Map>Map
Map>Map
Map>String/Number
Map>value
Map>String/Number
Map>value
Map>Map
Map>Map
Map>String/Number
Map>value
Map>String/Number
Map>value
Map>Map
Map>Map
Map>Map
Map>String/Number
Map>value
Map>Map
Map>String/Number
Map>value
Map>Map
Map>String/Number
Map>value
Map>Map
Map>Map
Map>String/Number
Map>value
Map>String/Number
Map>value
Map>Map
Map>Map
Map>String/Number
Map>value
Map>String/Number
Map>value
1 + 2 ^ (2 + (10 - 7)) * 3 + 2
2 + (10 - 7)
10 - 7
10-7+0
f_1507337_優先
f_1571371271_計算
10.0 - 7.0
3.0
f_1507337_最終
f_1481348562_計算
3.0 + 0.0
3.0
result
99.0
2+3.0+0
f_47507548_優先
f_-1006161388_計算
2.0 + 3.0
5.0
f_47507548_最終
f_-2133560364_計算
5.0 + 0.0
5.0
1+2^5.0*3+2+0
f_-418786079_優先
f_-959059895_計算
2.0 ^ 5.0
32.0
f_1855628224_計算
32.0 * 3.0
96.0
f_2037586494_計算
96.0 + 2.0
98.0
f_-418786079_最終
f_-929530109_計算
1.0 + 98.0
99.0

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/11474.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/11474.shtml
英文地址,請注明出處:http://en.pswp.cn/web/11474.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

react 對輸入做出反應與狀態

React 提供了一種操作 UI 的聲明性方式。您無需直接操作 UI 的各個部分&#xff0c;而是描述組件可能處于的不同狀態&#xff0c;并在它們之間切換以響應用戶輸入。 聲明式 UI 與命令式 UI 的比較 在設計 UI 交互時&#xff0c;可能會考慮 UI 如何響應用戶操作而更改。考慮一…

[C語言]總覽

目錄 1. 框架、默認數據類型 2. 分支結構 &#xff08;1&#xff09;. if ... else ... &#xff08;2&#xff09;. switch ... case ... 3. 循環結構 &#xff08;1&#xff09;. while &#xff08;2&#xff09;. for &#xff08;3&#xff09;. do ... while 4. 函…

區塊鏈的跨鏈交互:從學校間交流看跨鏈技術

區塊鏈是一種去中心化的分布式賬本技術&#xff0c;它通過加密學和共識機制來確保數據的安全性和不可篡改性。每個區塊鏈就像一所獨立的學校&#xff0c;有自己的制度、學生和重點專業。它們各自運行&#xff0c;有時在同一領域展開不同的活動。隨著區塊鏈技術的不斷發展&#…

【組合博弈】Outcome Classes

Outcome Classes 一個游戲 G G G的outcome函數代表這個游戲最終的結果&#xff0c;就是說這個游戲最后的贏家是誰。outcome函數是一個從游戲 G G G映射到四個結果的函數&#xff0c;四個結果分別是 L , R , P , N L, R, P, N L,R,P,N。意義如下表&#xff1a; ClassNameDefin…

學習筆記:Adaptive Platform(AP)適配到RTOS

一、背景 1、AP版本 Adaptive Platform AUTOSAR R20-11版本標準支持C14。CM模塊支持DDS、SOME/IP協議 2、RTOS RTOS-A核&#xff0c;當前完全支持POSIX PSE51、POSIX PSE52接口&#xff0c;POSIX PSE53部分支持&#xff0c;POSIX PSE54基本不支持。詳細接口參考&#xff1a…

第十四天:PHP 開發,輸入輸出類留言板訪問 IPUA 頭來源

1.PHP-全局變量$_SERVER 2.MYSQL-插入語法INSERT 3.輸入輸出-XSS&反射&存儲 4.安全問題-XSS跨站&CSRF等 1.輸入輸出類安全問題 反射性xss 這個先準備一個數據&#xff0c;隨便弄一個表名字&#xff0c;在隨便弄一點數據存入即可 作為連接的數據庫&#xff0c…

排序-歸并排序(merge sort)

歸并排序&#xff08;Merge Sort&#xff09;是一種分而治之的算法&#xff0c;它將原始數組分成越來越小的子數組&#xff0c;直到每個子數組只有一個元素&#xff0c;然后將這些子數組兩兩合并&#xff0c;過程中保持排序狀態&#xff0c;最終合并成一個完全有序的數組。歸并…

《一》Word文字編輯軟件---架構設計分析

1&#xff0c;簡單介紹 今天&#xff0c;我們來模擬offic軟件中的word文檔&#xff0c;運行如圖&#xff1a; 運行程序后會出現主界面&#xff0c;頂端的菜單欄包括“文件”“編輯”“格式”“窗口”和“幫助五個主菜單。 菜單欄下面是工具欄&#xff0c;包含了系統常用的功能按…

如何判斷海外住宅ip的好壞?

在海外IP代理中&#xff0c;住宅IP屬于相對較好的資源&#xff0c;無論是用于工作、學習、還是娛樂&#xff0c;都能得到較好的使用效果。作為用戶&#xff0c;該如何判斷海外住宅IP的好壞呢&#xff1f; 穩定性與可靠性&#xff1a;海外住宅IP相比動態IP地址&#xff0c;通常具…

Java全局異常處理,@ControllerAdvice異常攔截原理解析【簡單易懂】

https://www.bilibili.com/video/BV1sS411c7Mo 文章目錄 一、全局異常處理器的類型1-1、實現方式一1-2、實現方式二 二、全局異常攔截點2-1、入口2-2、全局異常攔截器是如何注入到 DispatcherServlet 的 三、ControllerAdvice 如何解析、執行3-1、解析3-2、執行 四、其它4-1、設…

電腦提示找不到ffmpeg.dll無法繼續執行代碼怎么辦?

電腦提示找不到找不到ffmpeg.dll無法繼續執行代碼怎么辦&#xff0c;有什么好的解決辦法&#xff0c;出現這樣的彈出就會導致軟件無法打開或者是異常關閉&#xff0c;找不到dll文件&#xff0c;是一個非常重要的電腦使用問題&#xff0c;會給使用者帶來許多的麻煩。那么找不到d…

LeetCode746:使用最小花費爬樓梯

題目描述 給你一個整數數組 cost &#xff0c;其中 cost[i] 是從樓梯第 i 個臺階向上爬需要支付的費用。一旦你支付此費用&#xff0c;即可選擇向上爬一個或者兩個臺階。 你可以選擇從下標為 0 或下標為 1 的臺階開始爬樓梯。 請你計算并返回達到樓梯頂部的最低花費。 代碼 …

MongoDB和AI 賦能行業應用:制造業和汽車行業

歡迎閱讀“MongoDB和AI 賦能行業應用”系列的第一篇。 本系列重點介紹AI應用于不同行業的關鍵用例&#xff0c;涵蓋制造業和汽車行業、金融服務、零售、電信和媒體、保險以及醫療保健行業。 隨著人工智能&#xff08;AI&#xff09;在制造業和汽車行業的集成&#xff0c;傳統…

CDN的工作原理及流程

CDN&#xff08;Content Delivery Network&#xff0c;內容分發網絡&#xff09;是一種構建在數據網絡上的分布式內容分發網絡。 CDN利用全局負載均衡技術&#xff0c;將用戶的訪問請求指向離用戶最近且工作正常的流媒體服務器上&#xff0c;由流媒體服務器直接響應用戶的請求…

Tableau學習2.0版——復習

官網下載鏈接&#xff1a;https://www.tableau.com/zh-cn/support/releases 學生賬戶申請鏈接&#xff1a;https://www.tableau.com/zh-cn/academic/students。直接去學信網下載學籍在線驗證作為申請證明。 目錄 1、可視化原理 2、基礎圖表制作 2.1 對比分析&#xff08;比…

@游戲行業er!MongoDB廣州線下沙龍邀您報名!

隨著游戲和應用程序的發展&#xff0c;數據變得越來越重要。在為您的下一個游戲選擇數據庫時&#xff0c;數據庫管理者常常會面對靈活性、可擴展性、可靠性、運營效率等問題或挑戰。 MongoDB在游戲開發領域有著廣泛的應用&#xff0c;靈活數據模型可以存儲和處理各種類型的數據…

JPA ENTITY EXTEND

1. Overview Relational databases don’t have a straightforward way to map class hierarchies onto database tables. To address this, the JPA specification provides several strategies: MappedSuperclass – the parent classes, can’t be entitiesSingle Table …

webpack處理js和css模塊化導入導出示例:

webpack默認并不能處理js模塊化的導入和導出,依賴于ts-loader和babel-loader webpack.config,js module.exports {entry: ./src/index.ts,output: {filename: main.js,},mode: development, // 或者 productionmodule: {rules: [{test: /\.ts/,exclude: /(node_modules)/,use:…

二維平移矩陣 (2D translate matrix)

2D translate matrix 推薦閱讀正文推薦閱讀 矢量旋轉矩陣 正文 之前我們介紹了矢量旋轉矩陣的形式,這里我們來介紹一下平移矩陣的形式。比如,我們我們有一個點,其坐標為 (0,1)。那么我們如何操作才能夠將這個點沿著 x 軸正方向平移 1 個單位長度呢? 這里我們以向右移動…

vj題單 P4552 [Poetize6] IncDec Sequence

思路&#xff1a; 一次操作&#xff1a;選一個區間[l, r]&#xff0c;把這個區間的數都加1或者都減1&#xff0c;可以將求該數列的差分數組b然后來進行該操作 一次操作的兩種種情況&#xff1a;&#xff08;l可以等于r&#xff09; 1.b[l]1 b[r1]-1 2.b[l]-1 b[r1]1 Q1:…