1. 程式人生 > >2017-2018-2 20172314 『Java程序設計』課程 結對編程練習_四則運算

2017-2018-2 20172314 『Java程序設計』課程 結對編程練習_四則運算

思路 耗時 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程序設計』課程 結對編程練習_四則運算