- 為了讓小學生得到充分鍛煉,每個練習題至少要包含2種運算符。同時,由於小學生沒有分數與負數的概念,你所出的練習題在運算過程中不得出現負數與非整數,比如不能出 3/5+2=2.6,2-5+10=7等算式。
- 練習題生成好后,將你的學號
- 當程序接收的參數為4時,以下為輸出文件示例。

一、需求分析
- 程序接受一個輸入參數n
- 隨機產生n道四則運算題
- 運算數要求為:0和100之間
- 運算符要求為:3到5個之間
- 每個四則運算式中不能出現負數與小數
- 將最終產生的結果存儲到txt文件中
二、功能設計
- 程序接受一個隨機數number(3=<number<=5),隨機產生number運算數與運算符。
- 程序由接受的n確定產生的運算式數量
- 程序將接受的運算數與運算符隨機組合產生運算式
- 輸出結果並將其存儲到result.txt文件中
三、設計實現
- 編寫程序,接受一個數N,確定產生運算式的數量
- 產生隨機數number(3到5之間),產生運算數與運算符
- 隨機組合運算式與運算符,產生運算式
- 判斷運算式是否合法,若不合法,將其進行修改
- 打印輸出結果至result.txt文件
四、測試運行
窗口運行結果:

測試結果存儲至result.txt文件中:

五、核心代碼
1 //存儲運算符 2 for(int j=0;j<arr_str.length;j++) { 3 if(arr_str[j]=='+'||arr_str[j]=='-'||arr_str[j]=='*'||arr_str[j]=='/') { 4 arrString=String.valueOf(arr_str[j]); 5 arr_str[j]=','; 6 arrslist1.add(arrString); 7 } 8 } 9 //存儲運算數 10 String s = new String(arr_str); 11 String[] ss = s.split(","); 12 for(int k=0;k<ss.length;k++) { 13 arrslist2.add(ss[k]); 14 } 15 //生成運算式 16 String[] arrs1 = arrslist1.toArray(new String[arrslist1.size()]);//運算符 17 String[] arrs2 = arrslist2.toArray(new String[arrslist2.size()]);//運算數 18 19 for(int m=0;m<arrs1.length;m++){ 20 arrslist.add(arrs2[m]);//運算數 21 arrslist.add(arrs1[m]);//運算符 22 } 23 arrslist.add(arrs2[arrs2.length-1]); 24 String[] arrs = arrslist.toArray(new String[arrslist2.size()]);//運算式
//存儲運算式 //封裝目的地 public static void filewriter(ArrayList<String> arithList) throws IOException { //封裝存儲位置 BufferedWriter BufferedWriterbw = new BufferedWriter(new FileWriter("result.txt")); BufferedWriterbw.write("201571030139"); BufferedWriterbw.newLine(); for(String s : arithList){ //寫數據 try { BufferedWriterbw.write(s+"="+js.eval(s)); } catch (ScriptException e) { e.printStackTrace(); } BufferedWriterbw.newLine(); BufferedWriterbw.flush(); } }
//判斷是否產生負數與小數 public static void check_arith(String arr[]){ for(int i=0;i<arr.length;i++){ //判斷是否產生負數 if(arr[i].contains("-")){ if(Integer.valueOf(arr[i-1])<Integer.valueOf(arr[i+1])){ arr[i]="+"; } } //判斷是否產生小數 if(arr[i].contains("/")){ int a = Integer.valueOf(arr[i-1]); int b = Integer.valueOf(arr[i+1]); int x = a%b; if(x!=0){ arr[i]="+"; } } } }
六、總結
在本次的四則運算程序的設計與編寫當中,我嚴格按照項目設計的一般步驟,有次序的進行程序的設計與編寫,比起以前的拿到題目就編寫程序的方式,節省了許多時間。再就是說一下本次的程序的難點:在產生運算式后,如何去判斷再運算中是否產生了負數與小數,在出現之后如何將其轉變的合理。
七、展示PSP
| PSP2.1 |
任務內容 |
計划完成需要的時間(min) |
實際完成需要的時間(min) |
| Planning |
計划 |
20 |
30 |
| · Estimate |
· 估計這個任務需要多少時間,並規划大致工作步驟 |
20 |
30 |
| Development |
開發 |
131 |
255 |
| ·· Analysis |
需求分析 (包括學習新技術) |
10 |
10 |
| · Design Spec |
· 生成設計文檔 |
5 |
10 |
| · Design Review |
· 設計復審 (和同事審核設計文檔) |
3 |
6 |
| · Coding Standard |
代碼規范 (為目前的開發制定合適的規范) |
3 |
4 |
| · Design |
具體設計 |
10 |
15 |
| · Coding |
具體編碼 |
80 |
200 |
| · Code Review |
· 代碼復審 |
10 |
10 |
| · Test |
· 測試(自我測試,修改代碼,提交修改) |
10 |
10 |
| Reporting |
報告 |
32 |
52 |
| ·· Test Report |
· 測試報告 |
20 |
40 |
| · Size Measurement |
計算工作量 |
2 |
2 |
| · Postmortem & Process Improvement Plan |
· 事后總結 ,並提出過程改進計划 |
10 |
10
|
-
Github地址:https://github.com/gzyt/Arithmetic
