1. 程式人生 > >java實現四則運算(陳浩安&郭曉航)

java實現四則運算(陳浩安&郭曉航)

不能 乘除 img 編寫 同事 spec 充足 找到 設計文檔

github項目地址:https://github.com/wzl666A/myApp-master

一、項目簡介

實現一個自動生成小學四則運算題目的命令行程序

二、項目實現情況

1. 使用 -n 參數控制生成題目的個數(實現)

2. 使用 -r 參數控制題目中數值(自然數、真分數和真分數分母)的範圍(實現)

3. 生成的題目中計算過程不能產生負數,也就是說算術表達式中如果存在形如e1 ? e2的子表達式,那麽e1 ≥ e2。(實現)

4. 生成的題目中如果存在形如e1 ÷ e2的子表達式,那麽其結果應是真分數。(實現)

5. 每道題目中出現的運算符個數不超過3個。(實現)

6. 程序一次運行生成的題目不能重復,即任何兩道題目不能通過有限次交換

+×左右的算術表達式變換為同一道題目。(實現)

7. 在生成題目的同時,計算出所有題目的答案,並存入執行程序的當前目錄下的Answers.txt文件。(實現)

8. 程序應能支持一萬道題目的生成。(實現)

9. 程序支持對給定的題目文件和答案文件,判定答案中的對錯並進行數量統計(實現)

三、PSP表格

PSP2.1

Personal Software Process Stages

預估耗時(分鐘)

實際耗時(分鐘)

Planning

計劃

30

60

· Estimate

· 估計這個任務需要多少時間

60

90

Development

開發

300

330

· Analysis

· 需求分析 (包括學習新技術)

240

360

· Design Spec

· 生成設計文檔

40

60

· Design Review

· 設計復審 (和同事審核設計文檔)

30

45

· Coding Standard

· 代碼規範 (為目前的開發制定合適的規範)

15

20

· Design

· 具體設計

60

90

· Coding

· 具體編碼

360

420

· Code Review

· 代碼復審

30

30

· Test

· 測試(自我測試,修改代碼,提交修改)

120

150

Reporting

報告

90

120

· Test Report

· 測試報告

60

90

· Size Measurement

· 計算工作量

45

60

· Postmortem & Process Improvement Plan

· 事後總結, 並提出過程改進計劃

30

40

合計

1450

1965

四、解題思路

  • 運用逆波蘭表達式通過棧進行加減乘除操作
  • 限制自動生成的表達式的形式與規模
  • 規定括號在表達式中的插入位置
  • 根據題目規定,不能出現負數和假分數,對不符合條件的減法和除法運算式,減號變為除號,反之除號變為減號
  • 依次生成每一條表達式時,檢索是否與前面生成的表達式重復

五、設計實現過程

技術分享圖片

六、代碼說明

項目分為三個包。分別為:

   ration, utils, main

其中,ration為有理數包。其中包裝了一個有理數類,該類有兩個構造方法,可以把字符串,或者兩個整型數包裝成有理數對象。技術分享圖片

還有一個uitls類。其中的方法都為靜態方法,有把正常表達式變為逆波蘭表達式的toRPN方法,還有計算逆波蘭表達式的calRPN方法。

除此之外,還有四則運算,還有一些其他的方法,例如判斷是否是負數,判斷是否是帶分數,也重寫了toString方法。

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

最後是主類,主要是程序的交互邏輯。

技術分享圖片

七、測試運行

生成的四則運算表達式

技術分享圖片

生成的四則運算表達式答案

技術分享圖片

對運算結果進行檢驗

技術分享圖片

八、項目小結

剛拿到題目時,我和同伴沒有做好充足的計劃與準備就開始編寫代碼,導致途中出現了不少的問題,例如沒看清楚需求,修改時不好修改或者不好在原本框架上添加,以及從一開始大局觀不明確,走到死胡同時發現無路可走只能從頭再來。這次項目實踐給我好好上了一課,決不能低估任何項目中的需求,並且在代碼編寫開始前應該從全局出發考慮,遍及到每一個需求,找到最合適的方法與結構去處理問題,今後我會三思而後行。同時,在結對合作過程中我也學習到對方的不少優點,並且我們在工作中能形成互補,取長補短,相輔相成,讓我感覺到1+1>2和合作的快樂與優勢。

java實現四則運算(陳浩安&郭曉航)