結對編程項目-四則運算(第一周)
-
需求分析
1、支持四則運算(加減乘除)算式的生成
2、支持對於所生成的題目給與答案解析
3、可以讓用戶作答並且判斷答案是否正確
4、可以統計正確率
5、支持括號
6、支持真分式(本周未實現)
-
設計思路
首先要有一個部分負責算式的生成(四則運算類和算式生成類)
四則運算類:負責數字和符號的生成
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 數字+符號;
}
}
算式生成器:是四則運算類的子類,負責調用父類的方法根據用戶的需求以字符串的形式生成單個算式
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圖
-
Junit測試
JUnit測試中綴表達式轉化為后綴表達式的轉換器
JUnit測試兩種引用(直接引用轉換並計算和分步驟轉換和計算)方式答案是否一樣
-
運行截圖
-
合作伙伴
-
姓名:莫禮鍾
-
學號:20162319
-
博客鏈接:點擊此處→