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

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

sta 小數 tokenize 成員 方法 技術分享 變化 sp2 ann

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

組內成員

  • 20172327 馬瑞蕃
  • 20172320 李聞洲
  • 20172317 蔣子行

需求分析

  • 自動生成題目
    • 可獨立使用(能實現自己編寫測試類單獨生成題目的功能)
    • 可生成不同等級題目
      • 不同等級的題目應該指的是不同難度的題目,意味著題目的復雜程度隨著等級的上升而上升
  • 題目運算(判題)
    • 可獨立使用
    • 實現中綴表達式轉為後綴表達式並計算
      • 自動生成的題目要先轉為後綴表達式,並計算這個後綴表達式
    • 判斷用戶答題正誤,並輸出正確結果
      • 應該要對用戶的答案支持分數形式的輸入
  • 支持真分數
    • 可獨立使用
    • 實現分數算式的計算
      • 生成的題目裏可以有真分數的出現,用戶的答案輸入也要支持分數的輸入
  • 題目去重(擴展需求,加分項)
    • 可獨立使用
    • 實現對自動生成表達式的去重

設計思路(大致)

如何實現隨機生成題目

首先生成的是中綴表達式的題目,然後每一級的題目都會在復雜程度上有變化。
比如一級題目就是最簡單的兩個操作數和一個運算符類型的:x#y(#代表隨機的一個運算符)
二級題目就是三個操作數加兩個運算符,並且還有可能會生成真分數作為操作數:x#y#z;生成真分數的條件由一個隨機數是否滿足某個條件決定
三級題目類似二級題目,但是加上了括號,不過為了防止隨機生成括號會導致諸如“)1+2(”之類的問題,括號的位置是固定的:(x#y)#z;後期也許會試試隨機生成不同的固定位置的括號

如何實現題目運算

利用棧來實現將中綴表達式轉為後綴表達式,然後再用後綴表達式來計算出值

  • 此處遇到的尚未解決的問題
    • 用後綴表達式來計算出結果的時候有可能會出現一個問題,根據老師給的方法,可能會出現遇“/”號退棧計算結果是一個小數,這個小數再入棧估計會出現問題

如何實現“支持真分數”

支持真分數有兩個情況:題目中出現真分數,和支持用戶的輸入是真分數
對於題目中出現真分數:

  • 因為“/”會混淆,不知道究竟是分數的那一橫還是除號,因此一個打算是把分數用括號括起來作為一個整體來處理,比如(1/2)就是分數二分之一,而1/2就是一除以二。不過另外一種處理方式是用上下倆點中間一橫的那個符號作為除號,而“/”就作為分數的那一橫,以此來區分開來,不過尚未最終決定
  • 真分數的生成就是書上例7.4的RationalNumber類改編而來的
    對於答案兼容真分數的使用:
  • 首先由於可能會有13/2之類的情況出現,所以這裏說是答案兼容分數的使用更好一些
  • 暫時的思路是在輸入那地方做手腳,可能要用StringTokenizer來先判斷你的輸入是否是分數表達式,若為是,則計算此分數表達式(也許有更簡單的方法)

相關過程截圖

由於還沒有完全弄好,所以這些代碼在後期可能會有巨大的變化,所以僅供參考
技術分享圖片
技術分享圖片
技術分享圖片
技術分享圖片
技術分享圖片
技術分享圖片

UML圖

嗯,很亂,反正後面會改

技術分享圖片

對隊裏其他人的評價

我覺得OK

PSP

PSP2.1 Personal Software Process Stages 預估耗時(分鐘) 實際耗時(分鐘)
Planning 計劃 60 60
Estimate 估計這個任務需要多少時間 100 100
Development 開發 800
Analysis 需求分析 (包括學習新技術) 100
Coding Standard 代碼規範 (為目前的開發制定合適的規範) 30
Design UML 設計項目UML類圖 50
Coding 具體編碼 30
Code Review 代碼復審 50
Test 測試(自我測試,修改代碼,提交修改) 30
Size Measurement 計算工作量(實際時間 ) 30
Postmortem & Process Improvement Plan 事後總結, 並提出過程改進計劃 30
合計 1240

本周總結

這周過去了,思路依舊不清晰,遇到了很多棘手的問題
我可能不太適合做編程這一行的,學不了學不了

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