20165325 2017-2018-2 《Java程序設計》結對編程_第二週:四則運算

20165325 2017-2018-2 《Java程序設計》結對編程_第二週:四則運算

1、碼雲連接

FAO項目的碼雲連接;html

一、Git提交日誌已經實現一個功能/一個bug修復的註釋說明,如圖所示;java

二、測試代碼並未上傳;git

三、主類位於Main.java中;算法

四、如有修改,仍會更新;編程

2、需求分析

以前在20165325 2017-2018-2 《Java程序設計》結對編程_第一週:四則運算裏面已經對需求分析做出了整體的闡述,在此不做贅述。上一週,咱們小組已經實現了在一個命令行程序中:dom

  • 計算小學四則運算題目(加、減、乘、除);
  • 支持整數、多運算符、真分數運算;

因此咱們本週的主要任務(要實現的需求)是:測試

  • 自動生成小學四則運算題目(加、減、乘、除);
  • 統計學生的正確率

3、設計思路

以前在20165325 2017-2018-2 《Java程序設計》結對編程_第一週:四則運算裏面已經指出了「如何計算帶整數、多運算符、真分數的小學四則運算題目」的設計思路,在這裏我主要分析關於如何實現本次需求的設計思路。.net

一、如何自動生成小學四則運算題目:Teacher類的設計

要隨機生成一個四則運算題目,其整體思路大體分兩種:命令行

  • 設計隨機生成一個中綴表達式,做爲四則運算的題目;
  • 設計隨機生成一個後綴表達式,再將其轉化爲中綴表達式,做爲四則運算的題目;

比較這兩種思路,我認爲後者更加有利於括號的生成:當咱們隨機生成了一個後綴表達式,只須要逆向的求出計算順序,即在正確的位置生成括號,從而生成相應的中綴表達式。設計

關於後者,我據說孫勖哲同窗在網上找到了相似的代碼,我以後會問他要連接,補充在這裏。(我選擇用前者實現的緣由,主要是......怎麼生成後綴表達式我沒想到什麼好算法,在網上也沒找到。)

關於前者,如何隨機生成一箇中綴表達式,個人主要設計思路是:

  • 隨機生成n個加減乘除運算符;
  • 在運算符之間以及表達式的開頭結尾隨機插入數字,造成一個沒有括號的中綴表達式;
  • 容許在至少包含兩個數字和一個運算符的狀況下產生括號
  • 識別而且去掉沒有意義的括號

咱們小組以上述思路爲指導,設計了Teacher類

  • CreStr(int n)方法隨機生成一個String類包含n個加減乘除運算符;
  • InpNum()方法在運算符之間以及表達式的開頭結尾隨機插入數字,造成一個沒有括號的中綴表達式;
  • InPar()方法隨機產生括號
  • DelPar()方法識別而且去掉沒有意義的括號
  • CreQue(int n)方法順序執行上述方法,產生題目;
二、如何統計學生的正確率:Student類的設計

Student類的主要功能應該是包括:

  • 輸入答案;
  • 覈對答案是否正確;
  • 統計正確率;

綜上所述,Student類的設計思路以下:

  • Answer(StringBuffer que)輸入答案而且覈對答案是否正確;
  • getPro()統計正確率;

4、UML類圖

5、功能截圖

6、結對感覺

這一週的結對編程比起上一週更難的地方在於思路的設計,對於怎麼產生一箇中綴表達式,咱們討論了好久,一再地改進算法。雖然最後的算法不是最理想的設計(不是先產生後綴表達式),可是咱們很開心,由於程序徹底是咱們本身設計的,也是咱們本身一點點寫的。最後統計一下,不加上測試代碼,大約有600餘行,有一點點成就感吧。

7、結對編程的照片


附:遇到的問題及部分解決方法

一、隨機數的產生範圍

rand.nextInt(n)裏面的參數n是產生一個0 <= nextInt(n) < n的隨機數,即0~n-1,參考連接rand.nextint()

須要注意rand是Random產生的對象,Random要用import java.util.Random;引入。

相關文章
相關標籤/搜索