第四次作業:個人項目-小學四則運算 “軟件”之初版
該作業要求來源於:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2186
代碼所在的githup的地址:https://github.com/cmhbaba/test20180912/blob/master/Main.java
一、需求分析
像《構建之法》的人物阿超那樣,寫一個能自動生成小學四則運算題目的命令行 “軟件”。
具體要求:任何編程語言都可以,命令行程序接受一個數字輸入,然後輸出相應數目的四則運算題目和答案。例如輸入數字是 30, 那就輸出 30 道題目和答案。 運算式子必須至少有兩個運算符,運算數字是在 100 之內的正整數,答案不能是負數。 如:
23 - 3 * 4 = 11
二、功能設計
1、要求用戶輸入題目數量
2、根據用戶輸入的數據輸出對應數量的題目
3、運算答案不能有負數
4、題目有2個運算符
5、隨機生成題目
三、詳細設計
隨機生成3個100以內的正整數和2個1~4的隨機數,2個1~4的隨機數代表著加減乘除,因為是隨機生成的所以符號的隨機問題也解決了。首先先隨機出來一個運算符和2個正整數組合成算式,然後再生成第2個運算符和最後一個正整數,再組合成算式,然後看是否有乘、除運算符,如果有就先進行乘、除的運算。
由於答案不能出現負數,所以當作減法的時候要判斷減數是否比被減數大,如果是的話就在次生成隨機數,指導減數比被減數小,這樣就不會出現負數。
四、主要代碼
import java.io.IOException; import java.util.Random; import java.util.Scanner; public class Main { public static void main(String[] args) throws IOException { Scanner input=new Scanner(System.in); int number; float result; System.out.println("請輸入題目數量:"); number=input.nextInt(); for (int i=0;i<number;i++){ int num1=new Random().nextInt(100)+1; int num2=new Random().nextInt(100)+1; int num3=new Random().nextInt(100)+1; int operator1=new Random().nextInt(4)+1; int operator2=new Random().nextInt(4)+1; if (operator1==1)//加法 { String a=num1+"+"+num2; if (operator2==1){ result=num1+num2+num3; a=a+"+"+num3+"="+result; } else if (operator2==2){ result=num1+num2; while(result<num3){ num3=new Random().nextInt(100)+1; } result=result-num3; a=a+"-"+num3+"="+result; } else if (operator2==3){ result=num2*num3; result=result+num1; a=a+"*"+num3+"="+result; } else if (operator2==4){ result=num2/num3; result=result+num1; a=a+"/"+num3+"="+result; } System.out.println(a); } if (operator1==2)//減法 { if (operator2==1){ result=num1-num2+num3; String a=num1+"-"+num2+"+"+num3+"="+result; System.out.println(a); } else if (operator2==2) { while ((num1-num2)<num3){ num1=new Random().nextInt(100)+1; num2=new Random().nextInt(100)+1; num3=new Random().nextInt(100)+1; } result=num1-num2-num3; String a=num1+"-"+num2+"-"+num3+"="+result; //a=a+"-"+num3+"="+result; System.out.println(a); } else if (operator2==3){ while (num1<(num2*num3)){ num1=new Random().nextInt(100)+1; num2=new Random().nextInt(100)+1; num3=new Random().nextInt(100)+1; } result=num2*num3; result=num1-result; String a=num1+"-"+num2+"*"+num3+"="+result; //a=a+"*"+num3+"="+result; System.out.println(a); } else if (operator2==4){ while (num1<(num2/num3)){ num1=new Random().nextInt(100)+1; num2=new Random().nextInt(100)+1; num3=new Random().nextInt(100)+1; } result=num2/num3; result=num1-result; String a=num1+"-"+num2+"/"+num3+"="+result; //a=a+"/"+num3+"="+result; System.out.println(a); } } if (operator1==3)//乘法 { String a=num1+"*"+num2; result=num1*num2; if (operator2==1) { result=result+num3; a=a+"+"+num3+"="+result; } else if (operator2==2){ while (result<num3){ num3=new Random().nextInt(100)+1; } result=result-num3; a=a+"-"+num3+"="+result; } else if (operator2==3){ result=result*num3; a=a+"*"+num3+"="+result; } else if (operator2==4){ result=result/num3; a=a+"/"+num3+"="+result; } System.out.println(a); } if (operator1==4)//除法 { String a=num1+"/"+num2; result=num1/num2; if (operator2==1){ result=result+num3; a=a+"+"+num3+"="+result; } else if (operator2==2){ while (result<num3){ num3=new Random().nextInt(100)+1; } result=result-num3; a=a+"-"+num3+"="+result; } else if (operator2==3){ result=result*num3; a=a+"*"+num3+"="+result; } else if (operator2==4){ result=result/num3; a=a+"/"+num3+"="+result; } System.out.println(a); } } } }
五、運行結果
由於我沒有設置保留小數點幾位,所以小數點之後的數字都直接舍去了。
六、問題與解決方法
一開始的時候我使用System.in.read()來讀取控制臺用戶輸入的數據,當運行的之後,比如我輸入1它就會輸出很多個題目給我,後面我發現System.in.read()讀取的只是字符,所以我後面使用Scanner類來解決。具體代碼如下:
Scanner input=new Scanner(System.in); int number; number=input.nextInt();
七、過程耗時估計與統計表
PSP2.1 | Personal Software Process Stages | 預計時間(分鐘) | 實際時間(分鐘) |
Planning | 計劃 | 20 | 20 |
· Estimate | 估計這個任務需要多少時間 | 180 | 175 |
Development | 開發 | 120 | 150 |
· Analysis | 需求分析 (包括學習新技術) | 20 | 20 |
· Design Spec | 生成設計文檔 | 10 | 20 |
· Design Review | 設計復審 | 10 | 10 |
· Coding Standard | 代碼規範 | 10 | 10 |
· Design | 具體設計 | 30 | 30 |
· Coding | 具體編碼 | 120 | 160 |
· Code Review | 代碼復審 | 30 | 20 |
· Test | 測試(自我測試,修改代碼,提交修改) | 60 | 120 |
Reporting | 報告 | 30 | 30 |
· | 測試報告 | 10 | 10 |
· | 計算工作量 | 10 | 10 |
· | 並提出過程改進計劃 | 10 | 10 |
第四次作業:個人項目-小學四則運算 “軟件”之初版