一、支持四則運算(加減乘除)算式的生成
二、支持對於所生成的題目給與答案解析
三、能夠讓用戶做答而且判斷答案是否正確
四、能夠統計正確率
五、支持括號
六、支持真分式(本週未實現)java
首先要有一個部分負責算式的生成(四則運算類和算式生成類)
四則運算類:負責數字和符號的生成
import java.util.Random; public class 四則運算 { int 符號編碼, 數字; String 符號; Random 符號隨機 = new Random(); Random 數字隨機 = new Random(); public 四則運算() { } public String 生成符號(){ 符號編碼 = 符號隨機.nextInt(4); 符號解析(符號編碼); return 符號; } public int 生成數字(){ 數字 = 數字隨機.nextInt(100); return 數字; } public void 符號解析(int a){ if (a==0) 符號 = "+"; else if(a==1) 符號 = "-"; else if (a==2) 符號 = "*"; else if (a==3) 符號 = "/"; } public String toString(){ return 數字+符號; } }
算式生成器:是四則運算類的子類,負責調用父類的方法根據用戶的需求以字符串的形式生成單個算式git
import java.text.DecimalFormat; public class 生成算式 extends 四則運算 { int 階數, 數字; String 算式, 符號; DecimalFormat fmt = new DecimalFormat("0"); public 生成算式 (int n){ 階數 = n; 生成(階數); } public String 生成(int j){ 數字 = 生成數字(); 算式 = fmt.format(數字); 算式 = 算式.concat(" "); for(int i=1; i<j; i++){ 符號 = 生成符號(); 算式 = 算式.concat(符號+" "); 數字 = 生成數字(); 算式 = 算式.concat(fmt.format(數字)+" "); } return 算式; } public String toString(){ return 算式; } }
代碼篇幅過大 轉換和運算都要用到棧
格式轉換器編程
最後要有驅動器
驅動器:負責調用運算器和生成器達到生成算式和答案的目的。在命令行裏面輸出算式,而後由用戶來做答,系統能夠判斷答案是否正確並給出正確率。
import java.util.Scanner; import java.text.NumberFormat; public class 驅動器 { public static void main (String[] args){ int 正確個數=0; Scanner scan = new Scanner(System.in); NumberFormat 百分比形式 = NumberFormat.getPercentInstance(); 生成算式 a = new 生成算式(2); 算式運算器 s = new 算式運算器(); 格式轉換器 g = new 格式轉換器(); String b = a.生成(2); String b1 = g.stringToArithmetic(b); int answer1 = s.運算(b1); System.out.print(b+"= "); int Answer1 = scan.nextInt(); if (answer1 == Answer1) { System.out.println("√"); 正確個數 ++; } else System.out.println("×");
UML圖dom
JUnit測試中綴表達式轉化爲後綴表達式的轉換器
JUnit測試兩種引用(直接引用轉換並計算和分步驟轉換和計算)方式答案是否同樣
測試
博客連接:點擊此處→編碼