2017-2018-2 20172314 『Java程序設計』課程 結對編程練習_四則運算
阿新 • • 發佈:2018-05-01
思路 耗時 info 中綴轉後綴 lse IE next clas RoCE
四則運算第一周總結
需求分析(方藝雯)
- 能隨機生成由使用者確定的任意多道四則運算題目
- 題目的難度等級可以選擇,也可以選擇不做混合運算。
- 題目運算實現中綴表達式轉為後綴表達式並計算。
- 可以判斷正誤,並計算正確率。
- 支持真分數的運算。
設計思路(同時輸出UML類圖)(方藝雯)
無棧
- 首先要確定生成題目的數量,可以用一個循環,使用Scanner,循環次數由用戶輸入的數確定。
- 算式的產生
- 寫一個類實現整數的四則運算:定義兩個整數numerator和denominator,利用 int nextInt(4) 方法隨機輸出0123四個整數,分別代表進行加減乘除運算,然後根據隨機輸出實現的的運算符進行numerator和denominator的加減乘除運算。
- 再寫一個類實現分數的四則運算:利用書上的第七章RationalNumber和RationalTester類可以實現。
- 還需要判斷正誤的操作,並輸出成績和正確率。再寫一個類,將運算結果與用戶輸入的值比較,用if-else語句輸出“正確”或“錯誤”並利用“x++”統計正確題目個數,與題目總數相除即得正確率。
- 這種方法只是最開始的簡單構思,並沒有實現要求的所有功能,比如“實現中綴表達式轉為後綴表達式並計算”,在老師講完有關棧的知識後進一步構思。
有棧
- 產生式子:首先,讓用戶選擇題目的難度等級,分別對應不同數量的數字進行運算,確定隨機產生的整數的個數,定義兩個整數numerator和denominator代表分子和分母。分數的產生利用書上第七章RationalNumber類和RationalTest類(也可以單獨調用該方法只進行分式的計算),然後調用函數StringTokenizer將分數作為一個String型的,然後同時調用產生分數和整數混合,然後用一個hasMoreTokens方法遍歷所有的數,遇到String型的提出,遇到整數型的則將其作為分子,分母為1,然後將這些數存入設立的棧1中(全為分數),然後另外設立一個棧2,利用 int nextInt(4) 方法隨機輸出0123四個整數(產生的數量為棧1 中數字數量減一),分別代表加減乘除運算符,將數存入棧中,然後先讀取棧1的一個數字,然後讀取棧2的一個運算符,然後繼續讀取棧1的,直到讀取完所有的數。然後再將這些數輸出,此時這些數都是String型的分數,返回出來字符串再用next循環,一個一個分開,分數在中綴轉後綴時,2/3為一個整體,轉成後綴,聲稱出來又是一串,分開後next出來一個分數,創建一個對象自定義以/為分隔符分開。得出結果,利用RationalNumber類的reduce和gcd方法化簡,結果為真分數的話會保留分數形式,假分數的話結果為整數。
- 判斷正誤:將用戶輸入的數字與計算機的結果比較,輸出正誤。如果答案是分數,分別比較分子分母來判斷。
- 統計正確率:用一個循環,當判斷正誤時為正確時,正確題數加一,最後總數與題目數相除可得。
UML圖(譚鑫)
PSP(王禹涵)
PSP2.1 | Personal Software Process Stages | 預估耗時(小時) | 實際耗時(小時) |
---|---|---|---|
Planning | 計劃 | 1 | 1 |
Estimate | 估計這個任務需要多少時間 | 20 | |
Development | 開發 | 2 | 10 |
Analysis | 需求分析 (包括學習新技術) | 2 | 2 |
Design Spec | 生成設計文檔 | 1 | 1 |
Design Review | 設計復審 (和同事審核設計文檔) | 0.5 | 2 |
Coding Standard | 代碼規範 (為目前的開發制定合適的規範) | 0.5 | 0.5 |
Design | 具體設計 | 2 | |
Coding | 具體編碼 | 2 | |
Code Review | 代碼復審 | 1 | |
Test | 測試(自我測試,修改代碼,提交修改) | 1 | |
Reporting | 報告 | 2 | |
Test Report | 測試報告 | 2 | |
Size Measurement | 計算工作量 | 1 | |
Postmortem & Process Improvement Plan | 事後總結, 並提出過程改進計劃 | 1 |
代碼規範(王禹涵)
- 按照IDEA的格式規範,默認縮進格式為4空格,用Tab鍵縮進。
- 代碼命名簡潔易懂,包含必要信息有助於理解代碼。
問題
- 問題一:剛開始的時候不知道如何進行復雜的運算,所以只想到了沒有棧的方法。
- 問題一解決:在老師講解完有關棧的使用之後,通過實現了中綴表達式轉為後綴表達式並計算。
- 問題二:如何讓分數參與中綴後綴表達式的計算,而不被直接當做除法計算。
- 問題二解決:這個問題我們小組自己討論的是利用書上的RationalNumber兩個類作為一部分,與前綴後綴表達式的計算分離開,作為單獨的計算分數的一部分,但這與實驗要求不符,在詢問了助教後,他告訴我們一個StringTokenizer方法,可以用自定義字符串作為標記,這樣可以讓除法的符號為“%”,分式為“/”來區分,分別提取分子分母,使所有的整數也作為分母為1的分數來運算,最後再加以轉換。
結對編程的好麗友
- 20172323 王禹涵:中綴轉後綴
- 20172314 方藝雯:後綴表達式的計算
- 20172305 譚鑫:中綴表達式的輸出
團隊感受
我們團隊中,我負責寫需求分析和設計思路,譚鑫負責做UML類圖,王禹涵負責做PSP圖和確定代碼規範。這些是第一周每個人大致的分工,每個人的負責部分都有跟隊員討論過,比如我負責寫的設計思路,是在大家一起討論尋找不合適的地方修改,是在老師和助教的講解之後再次修改過的。總的來說,團隊意見基本一致,並能合理的解決隊員提出的意見,所以團隊合作還是很高效的。
參考
- 2017-2018-2 1723 『Java程序設計』課程 結對編程練習_四則運算
- 四則運算階段性總結
2017-2018-2 20172314 『Java程序設計』課程 結對編程練習_四則運算