-
結對編程項目-四則運算
1.需求分析
- 根據輸入的題目數能自動打印出同數目的題目
- 在每次答題后可以顯示是否正確
- 錯誤的答題可以顯示正確答案
- 答題后顯示正確數目數
- 結束是詢問是否再來一次
2.設計思路
- 如何解決能讓程序自動輸出數學題目的問題
1.首先我們假定一個數學運算:
A + B = C,在此運算中C是由用戶輸入的,而A , B ,“+”,則應該是由計算機生成的。根據上述,我們想到了Random類(第3章),隨機產生數字A 和 B,這是我們開始糾結“+”,是不是也讓其隨機產生(+ , * , /),討論之后決定擱置,因為技術不夠決定作為項目外的擴展。
2.由於放棄了隨機產生運算符的“荒唐”想法,我們換了一種思路,能否先確定幾種運算規則如:
A + B = ;A * B = ;A / B =,讓后在由系統隨機選取其中一種。對此我們想到了switch語句(第4章),幾種規則的運算就相當於switch分支,每條分支代表一種運算。
3.確定使用switch語句后,我們就得確定switch語句首先得計算的表達式,表達式的值等於運算規則數,不宜過多4~6個。
於是我們再次運用Random類
int num = in.nextInt(6),所以隨機產生的0~5六個數都有相應的語句匹配。4.輸出題目的問題解決后,打印出用戶想要的題目數量,我們決定使用Do語句
首先
int num1 = in.nextInt讀入用戶輸入的數字,然后使用do(int num2 = 0;num 2 < num1;num2++)
- 解決了產生數學問題的主要問題后,其余要求便十分簡單了
1.解決答題后顯示正確與否,並顯示正確答案我們使用 if-else語句,在switch語句中每個分支,我們加入如下“語句”
首先要讓計算機計算我們所隨機產生的數學題目,讓后比較用戶輸入是否結果等於正確值,在判斷該輸出何種語句
例如:
if ( D /用戶輸入/ == A + B)
System.out.println ("true");
sum = sum + 1;
else
{ System.out.println ("Wrong")
int num3 = A + B; System.out.println ("right answer:" + num3);
}
同時在每個分支中加入sum = sum + 1sum表示作對的題目數,只要在最后打印出sum的值就可。2.做題結束是詢問是否在來一次。
在整個do語句上加入while語句,使用標記值來確定是否退出,如PP4.8.
- 這是我們此次的思路簡圖:

3.實現過程中的關鍵代碼解釋
- 這次實驗所用的所有代碼都來自第3,4章的內容:
//進行X次循環,X為用戶所要求的題目數,於此產生X道題目
for (int i = 0; i < X; i++)
//產生一種運算
switch (num3)
{
case 0:
int a,b;
a = in.nextInt(21) - 10;
b = in.nextInt(21) - 10;
System.out.println (a + "+"+ b+ "=" +"?");
int d = out.nextInt();
if (d == a + b)
{System.out.println ("true");
sum = sum + 1;
}
else
System.out.println ("wrong");
break;
.......
}
//整體看
while (...)
{
do(...)
{
switch(..)
{
if(...)
}
}
}
4.遇到的困難及解決方法
- 當我們解決了自動生成數學題目的問題后,以為一切都輕松了,但沒想到測試時才發現最難得是分數運算的問題,比如:
2/3+4/5=?但程序打出這個題目時,我們輸入22/15時,程序顯示wrong,因為這是2/3=0,4/5=0,這就很尷尬了。於是我們上網查了查發現計算機中沒有分數····,這就有點不明白謝老師什么意思了?,由於這項任務是分給了王旌含,所以他在博問上提了出來關於分數的計算問題;最大公約數求解; Daniel Cai 給了我們一個小小的思路,將分子分母分開計算,(好吧,后面的求最大公約數的問題確實沒弄懂,有些語句還沒了解),然后,我們兩個又卡住了,因為用戶在計算輸入時是要肯定輸入:22/15,那要怎樣才能讓計算機比較輸入數與計算結果是否相等呢?難道要將輸入的結果與計算結果分子分母拆開來一個個比較嗎?想到這,我們又有了一個思路(做中學嘛),我們將用戶輸入不用(int)而用(string),因為我們想到了書中的程序4.8檢查一個字符串是否是回文時,他將字符串的第一和最后一個逐個對比left = 0; right = str.length() - 1; while(str.charAt(left) == str.charAt(right) && left < right)於是我們抓住這一點:
【1】首先我們將分子 = N,分母 = M, String wb = new String(n+"/"+m);然后定義一個wb,保險起見,我們先charAt和length,發現wb 如我們所想那樣為:22/15
【2】然后我們string wc = out.nextLine();;一開始我們這樣想的```System.out.println(wc == wb);但結果顯示為false,為什么?這么煩?我們又想到了婁老師和謝老師給的鏈接調度場算法提到的“棧”“堆”的概念,總之我們覺得他們不等就對了,所以才誕生將這兩個字符串逐個字符比較的想法。
【3】while (wb.charAt(left) == wc.charAt(left) && left < right)
{
left++;
}
if (left == right)
System.out.println ("true");
【4】就這樣我們轉變了分數的比較方法,不比較大小,轉而比較字符。
【5】於是我們先寫了個小程序試驗了一下

運行之后為

【6】將其植入進去運行了下又發現問題了

【7】所以現將老版本貼出來.......(不全)

《程序設計與數據結構》第4周學習總結
教材學習內容總結
-
第四章:學會使用if-else語句,switch語句,while語句,do語句,for語句
-
第七章:主要學習定義使用數組和關於命令行參數的知識
教材學習中的問題和解決過程
-
1.問題:程序4.2中出現的各種不解
詳述:1.首先4.2程序的總體思路是將用戶輸入的字符串,按照從中間聚攏的方式依次判斷字符是否“==”。
2.關於left = 0,right = str.length(),應該是字符串字符的排序是從0開始的吧,這就有點像數組索引是從0開始的一般吧。 -
2.問題:程序7.5的問題
詳述:張師瑜的問題
代碼調試中的問題和解決過程
- 1.PP4.8中要求使用標記值來決定用戶是否想要退出,於是想到了程序4.8
while (another.equalsIqnoreCase("Y"))
但是依據4.8的內容,但最后運行的時候卻直接跳過了輸入的一步,致使程序結束並未進行循環。
所以,我更改了while中的條件

后來很多同學都出先相同問題博問
代碼托管
- 代碼量截圖:

上周考試錯題總結
- 1.Linux Bash中,查找當前目錄中前天創建的Java文件的命令是(find . -name *.java -ctime 2)
總結: 對於find命令不夠熟悉,實驗樓中介紹了find,它不但可以通過文件類型、文件名進行查找而且可以根據文件的屬性(如文件的時間戳,文件的權限等)進行搜索。
find 命令的路徑是作為第一個參數的, 基本命令格式為 find [path] [option] [action]
-mtime n: n 為數字,表示為在n天之前的”一天之內“修改過的文件
-mtime +n: 列出在n天之前(不包含n天本身)被修改過的文件
-mtime -n: 列出在n天之內(包含n天本身)被修改過的文件
newer file: file為一個已存在的文件,列出比file還要新的文件名
- 2.使用JDB進行調試時查看源代碼的命令是(list)
總結: JDB調試應用不過關,老師的博客
結對及互評
點評模板
和我一小組的是王旌含,這次咋們一起研究了四則運算,雖然最后還是有點問題,很尷尬,但已經有了小默契,能很好分工,但還得繼續努力。
點評過的同學博客和代碼
其他(感悟、思考等,可選)
這周學習難度突然有點大了,但跟着自己的節奏來倒也學的不慌不亂,有所收獲。保證每天都有一個小時以上看書實驗的時間。
謝老師的結對編程項目,給了我和王旌含一個挑戰,特別是分數,簡直弄瘋了,博客園中的博問提了又提....
有時候換個角度思考,柳暗花明又一村。
有時候沒有困不困難,只有想不想做,你做了,可以說難,沒做的人也可以說困難,但關鍵看自己是否有收獲,但····真的有點難了···
班上一些同學很努力,能力很強,得向他們學習。
學習進度條
| 代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
|---|---|---|---|---|
| 目標 | 5000行 | 30篇 | 400小時 | |
| 第一周 | 070/200 | 1/2 | 20/20 | |
| 第二周 | 300/500 | 2/4 | 30/38 | |
| 第三周 | 620/1000 | 3/7 | 51/60 | |
| 第四周 | 1200/1300 | 4/9 | 78/90 |
-
計划學習時間:XX小時
-
實際學習時間:XX小時
-
改進情況:
(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表)
