結對編程——四則運算(第一周)
阿新 • • 發佈:2018-04-16
inf 情況 代碼托管 string on() 測試 運算 Coding 總數
結對編程——四則運算(第一周)
需求分析
題目要求
一個命令行程序實現:
- 自動生成小學四則運算題目(加、減、乘、除)
- 支持整數
- 支持多運算符(比如生成包含100個運算符的題目)
- 支持真分數
統計正確率
需求理解
- 輸入:需要計算的式子數、計算結果
輸出:判斷後的答案(true/false) - 滿足真分數的運算如:1/3 + 1/4 = 7/12
- 處理的運算符為 +, ?, ×, ÷
- 能處理用戶的輸入,並判斷對錯,統計正確率。
設計思路
- 自動生成四則運算,需要用到隨機數,用隨機數隨機生成數字,以及隨機生成0,1,2,3分別代表加減乘除符號以switch語句進行分類
- 特殊情況主要有除數不能為0,假如除數為0,則再產生一個隨機數,利用while循環;
- 用count統計做對的條數,與總數相除作為正確率
實現過程中的關鍵代碼解釋
import java.util.Scanner; public class question { public static void main(String[] args) { int k; int total,answer=0; int answer2; int count=0; System.out.println("請輸入你需要練習的題目數:"); Scanner input=new Scanner(System.in ); total=input.nextInt(); question question=new question(); for(int n=0;n<total;n++) { int i=(int)(Math.random()*100); int j=(int)(Math.random()*100); switch((int)(Math.random()*4)) { case 0: System.out.println(i+"+"+j+"="); answer=i+j; break; case 1: if(i<j) { int temp=i; i=j; j=temp; } System.out.println(i+"-"+j+"="); answer=i-j; break; case 2: System.out.println(i+"*"+j+"="); answer=i*j; break; case 3: while(j==0) j= (int)(Math.random()*100); System.out.println(i+"/"+j+"="); answer=i/j; break; } Scanner input2=new Scanner(System.in ); answer2=input2.nextInt(); if(answer2==answer){ System.out.println("正確!"); count++; } else{ System.out.println("錯誤!"); } } float cent=(float)count/(float)total; System.out.println("正確率為"+cent); } }
運行過程截圖
代碼托管地址
碼雲地址
遇到的困難及解決方法
- 困難1:如何高效的將一個輸入的值轉化為可用數字?
- 解決方法1:對於為0的除數,利用while循環控制,進行排0輸出。
- 困難2:選用何種方法對運算符進行隨機處理?
- 解決方法2:隨機生成0,1,2,3,以數字分類代替運算符分類。
PSP表格
PSP2.1 | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
---|---|---|---|
· Test | · 測試(自我測試,修改代碼,提交修改) | 20min | 25min |
Planning | 計劃 | 15min | 10min |
· Estimate | · 估計這個任務需要多少時間 | 240min | 260min |
Development | 開發 | 40min | 35min |
· Analysis | · 需求分析 (包括學習新技術) | 15min | 35min |
· Coding Standard | · 代碼規範 (為目前的開發制定合適的規範) | 10min | 15min |
· Coding | · 具體編碼 | 2h | 100min |
· Code Review | · 代碼復審 | 30min | 40min |
結對編程——四則運算(第一周)