目錄
文章目錄
- 目錄
- 介紹
- 開始實戰
- 引入數學表達式計算庫
- 引入流程圖代碼生成庫
- 開始進行生成
介紹
大家好 今天我們來分享一個新知識,將數學表達式的整個計算過程,以及計算繁多結果在 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
的圖代碼,我們在下面將其展示了出來 供大家觀看!