四則運算(基於控制臺)
阿新 • • 發佈:2018-03-30
bre 地址 類型 都是 eat 報告 correct acc HR
2.Calculate.java
計算結果並輸出文檔
3.Result.java
比較答案並給出正確錯誤題號
4.FenShu.java
分數的運算
5.Binary.java
生成二叉樹
功能2.生成隨機運算符
功能3.生成表達式
功能4.生成二叉樹
功能5.分數的計算
功能6.計算題目結果
功能7.比較答案
五、代碼說明
去除表達式首部和尾部的多余括號 當出現了括號不匹配時出現異常拋出
public TreeNode createTree(String expression) { /* * 去除表達式首部和尾部的多余括號 當出現了括號不匹配時出現異常 拋出 */ if (expression.indexOf("(") == 0) { for (int i = 0; i < expression.length(); i++) { if (expression.startsWith("(") == true) { if (expression.endsWith(")") == true) { expression = expression.substring(1, expression.length() - 1); } else { /* * 拋出異常 括號不比配 */ } } } } char[] exp = expression.toCharArray(); TreeNode newNode = new TreeNode(); String leftString = new String(); String rightString = new String(); String stack = new String(); // 用於存儲括號的棧 當表達式檢測完畢後 若棧不為空 這說明括號使用不合法 if (checkOperator(expression) == true) { int index = 0; // 記錄最先掃描到的不在括號中的加號或減號 必為表達式運算的最後一次操作 int multi_div = 0; // 記錄最先掃描到的不在括號中的乘號或除號的位置 只有在掃描不到加號和減號的前提下才有用 for (int i = exp.length - 1; i >= 0; i--) { if (exp[i] == ‘)‘) { stack = stack + exp[i]; } else if (exp[i] == ‘(‘) { if (stack.length() > 0) { stack = stack.substring(0, stack.length() - 1); } } else if (exp[i] == ‘+‘ && stack.length() == 0 || exp[i] == ‘-‘ && stack.length() == 0) { index = i; break; } else if (exp[i] == ‘/‘ && stack.length() == 0 || exp[i] == ‘*‘ && stack.length() == 0) { multi_div = i; } else { if (exp[i] < 48 || exp[i] > 57) { /* * 拋出異常 出現不合法的字符 */ } } } if (stack.length() != 0) { /* * 拋出異常 括號不匹配 */ } int separator; if (index != 0) { // 說明表達式的最後運算的為加法或減法 separator = index; } else { separator = multi_div; } newNode.data = String.valueOf(exp[separator]); int pos = 0; for (; pos < separator; pos++) { leftString = leftString + exp[pos]; } pos++; for (; pos < exp.length; pos++) { rightString = rightString + exp[pos]; } if (node == null) { node = newNode; } newNode.left = createTree(leftString); newNode.right = createTree(rightString); } else { newNode.data = expression; } return newNode; }
六、測試運行
題目文件test.txt
答案文件calculate.txt
數據報告文件result.txt
七、小結
此程序未實現查重功能,此程序已用二叉樹結構存儲日後在在這基礎上完善已完成查重功能。此程序對於各種類型的操作數運算,是把各類型的操作數轉換為分數形式運算,最後通過約分得出結果。
八、代碼地址:https://gitee.com/jingyinglan/codes/iczorhpd2juakbw8vg4lx19
四則運算(基於控制臺)