小學數學題
阿新 • • 發佈:2018-09-19
protected 未能 上一個 文件的 過程改進 技術分享 是否 math類 範圍
Pair_211606349蔡晨旸_211606369藺皓雯
設計小學生計算題
一、預估與實際
PSP2.1 | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
---|---|---|---|
Planning | 計劃 | 2h | 3h |
? Estimate | ? 估計這個任務需要多少時間 | 3d | 2.5d |
Development | 開發 | 2d | 2d |
? Analysis | ? 需求分析 (包括學習新技術) | 1d | 0.5d |
? Design Spec | ? 生成設計文檔 | 3h | 1.5h |
? Design Review | ? 設計復審 | 1.5h | 1h |
? Coding Standard | ? 代碼規範 (為目前的開發制定合適的規範) | 1h | 1h |
? Design | ? 具體設計 | 3h | 3h |
? Coding | ? 具體編碼 | 2d | 2d |
? Code Review | ? 代碼復審 | 2h | 1h |
? Test | ? 測試(自我測試,修改代碼,提交修改) | 2h | 1h |
Reporting | 報告 | 0.5h | 1h |
? Test Repor | ? 測試報告 | 2h | 0.5h |
? Size Measurement | ? 計算工作量 | 0.5h | 0.5h |
? Postmortem & Process Improvement Plan | ? 事後總結, 並提出過程改進計劃 | 2h | 1h |
合計 3d | 3d |
二、需求分析
- 我通過上網搜索的方式了解到,小學一年級數學有如下的幾個特點:
- 特點1
- 小學一年級學到100以內加減法,最大99
- 特點1
- 我通過上網搜索的方式了解到,小學二年級數學有如下的幾個特點:
- 特點1
- 小學二年級學到一百內加減法。 - 特點2
- 小學二年級學到九九乘法表的表內乘除法。 - 特點3
- 小學二年級學到整百整千加減法。 - 特點4
- 小學二年級學到幾百幾十加減整百或整十數。
- 特點5
- 小學三年級學習三位數乘除兩位數的計算,以及加減法計算,加減法計算無要求。
- 特點1
經過分析,我認為,這個程序應當:
- 對一年級題來說,數字小於100,只有加減法。
- 對二年級題來說,使用的數字小於10000;100內加減隨意;
- 整百整千加減隨意;
- 過百整數加減整百或整十;
- 乘時數字1-9;
- 除時要得出商和余數。
對三年級來說,數字在100至999之間,乘除法題。被乘數與被除數為兩位數。
- 加減法題沒有什麽限制。三、設計
1. 設計思路
說明你如何設計這個程序
比如:
- 這個程序在上一個用於計算小學一二年級的加減乘除法題的基礎上加上計算三年級的乘除法題。
- 三年級的乘除法題數字在100至999之間,乘除法題。被乘數與被除數為兩位數。
- 在加減計算題上,三年級沒有什麽數字大小限制。
- 關鍵函數的流程圖是怎樣的?
- https://img2018.cnblogs.com/blog/1472365/201809/1472365-20180917231427698-1504002330.png
2. 實現方案
- 準備工作:先在Github上創建倉庫,克隆到本地,仔細閱讀題目要求,上網查找關於小學一二年級及三年級數學題目的出題範圍和他們的學習範圍。
- 技術關鍵點:將想要輸入到txt文件上的題目與答案一次性輸入到txt文件中,不逐條輸入。
- 將括號加入四則運算。結果不能為負。
- 在四則混合運算中,實現調度場算法,求值逆波蘭表達式。
- 先創建文件;在Math類中使用與主函數相同接口創建接口;將產生的隨機數以及隨機運算符號,算術“題目”與“答案”一起存入文件;最後,在文件中查看結果。
四、編碼
- 在結對編程之後,我與隊友互相查看並學習了上一次實驗對方的代碼。隨後,將自己的代碼進行了改進。我將自己原來的代碼中關於將數據輸入文件的方法進行了改進。
- 使得所寫的數據能夠一次性輸入到文件中。但是,在for循環中的計算結果目前還未能完全正確地輸出在文件中。
1. 調試日誌
- 本次作業,最大的問題就是如何做到將for循環中的用於輸出的變量值正確地顯示在文件中,並且在四則運算中加入括號一並進行運算。
2. 關鍵代碼
String c[] ={"+","-","×","÷"};
byte contentInBytes[];
Random rand=new Random();
for (int i=0;i<=n;i++) {
int a=rand.nextInt(c.length);
String resultChar=c[a];//運算符號存入resultChar
if (grade==1) {
for (int i1=0;i1<=n;i1++) {
left=rand.nextInt(100);
right=rand.nextInt(100);//左右百內隨機數
String b= left+resultChar+right+"=";//題目
//又一套,存題目
if(resultChar=="+"){
re3=left+right;
String d=left+resultChar+right+"="+re3;
}else if(resultChar=="-"){
re3=left-right;
String e=left+resultChar+right+"="+re3;
}
}
}
if (grade==2) {
for (int i2=0;i2<=n;i2++) {
if(resultChar=="+"){
left=rand.nextInt(10000);
right=rand.nextInt(10000);
String b= left+resultChar+right+"=";
if((left%100==0 || left%1000==0 || left<=100)&&(right%100==0 || right%1000==0 || right<=100)) {
re3=left+right;
String e=left+resultChar+right+"="+re3;
}
if(left%100==0 && left>=100 && (right%100==0 || right%10==0)) {
re3=left+right;
String f=left+resultChar+right+"="+re3;
}
}else if(resultChar=="-"){
left=rand.nextInt(10000);
right=rand.nextInt(10000);
String b= left+resultChar+right+"=";
if((left%100==0 || left%1000==0 || left<=100)&&(right%100==0 || right%1000==0 || right<=100)) {
re3=left-right;
String g=left+resultChar+right+"="+re3;
}
if(left%100==0 && left>=100 && (right%100==0 || right%10==0)) {
re3=left-right;
String h=left+resultChar+right+"="+re3;
}
}else if(resultChar=="×"){
left=rand.nextInt(10)+1;
right=rand.nextInt(10)+1;
String b= left+resultChar+right+"=";
re3=left-right;
String j=left+resultChar+right+"="+re3;
}else if(resultChar=="÷"){
left=rand.nextInt(10)+1;
right=rand.nextInt(10)+1;
String b= left+resultChar+right+"=";
re2=left/right;
re1=left%right;
String k=left+resultChar+right+"=";
if(re1==0) {
re3=left/right;
String l=left+resultChar+right+"="+re3;
}
else {
String m=left+resultChar+right+"="+(re1+"..."+re2);
}
}
}
}
if (grade==3) {
for (int i3=0;i3<=n;i3++) {
if(resultChar=="+"){
left=rand.nextInt(10000);
right=rand.nextInt(10000);
re3=left+right;
String o= left+resultChar+right+"="+re3;
}
if(resultChar=="-") {
left=rand.nextInt(10000);
right=rand.nextInt(10000);
re3=left-right;
String o= left+resultChar+right+"="+re3;
}
if(resultChar=="×") {
left=rand.nextInt(1000)+100;
right=rand.nextInt(100)+10;
re3=left*right;
String o= left+resultChar+right+"="+re3;
}
if(resultChar=="÷") {
left=rand.nextInt(1000)+100;
right=rand.nextInt(100)+10;
re3=left/right;
String o= left+resultChar+right+"="+re3;
re2=left/right;
re1=left%right;
if(re1==0) {
String p=left+resultChar+right+"="+re3;
}
else {
String p=left+resultChar+right+"="+(re1+"..."+re2);
}
3. 代碼規範
請給出本次實驗使用的代碼規範:
- 第一條[強制]變量和常量的命名方式:
非公有(private/protected/default)變量前面要加上小寫m;
靜態變量(static)前面加上小寫s;
其它變量以小寫字母開頭;
靜態常量(static final)全大寫。
- 第二條[強制]常量命名全部大寫,單詞鍵用下劃線隔開,力求語義表達完整,不要嫌名字長
- 第三條抽象類命名使用 Abstract 或 Base 開頭;異常類命名使用 Exception 結尾;測試類命名以它要測試的類名開始,以Test結尾。
- 第四條[強制]類型與中括號緊挨相連來定義數組。
- 第五條[強制] POJO類中布爾類型的標量,都不要加is前綴,否則部分框架解析會引起序列化錯誤。
- 第六條[強制]杜絕完全不規範的縮寫,避免忘文不知義
- 第七條[推薦]為了達到代碼自己自解釋的目標,任何自定義編程元素在命名時,使用精良完整的單詞組合來表達其意。但是有些名稱實在過於長,這個可以適當的縮寫,不要忘文不知義就可以。這個不是客觀的規定。
- 第八條[推薦]如果模塊、接口、類、方法使用了設計模式,在命名時體現出具體模式。
並人工檢查代碼是否符合規範
五、測試
|輸入測試數據3 1|輸出成功並且結果正確 |輸出成功,加減法答案正確 |
|輸入測試數據3 2|輸出成功並且結果正確 |輸出成功,但答案都不正確|
|輸入測試數據3 3|輸出成功並且結果正確 |輸出成功,加減乘除答案都正確,但是除數不顯示余數|
六、總結提高
- 這次實驗中,我做的結果並沒有達到老師的要求。在四則運算中加入括號進行運算並沒有實現,應該繼續提高。與隊友的配合讓我學習到了新的知識,相信長期以往,一定能共同進步,變得更加優秀。
小學數學題