20165233結對編程項目-四則運算(第二週)

20165233結對編程項目-四則運算(第二週)

碼雲連接

需求分析

結對編程項目-四則運算(第一週)html

設計思路

  • 本週須要實現的功能是能夠運算真分數的四則運算,因此每一個方法中要對整數與真分數的狀況分別進行討論。
  • add,substract,multiply,divide四個方法中,首先要進行是整數仍是真分數的判斷。對於真分數,首先利用split()方法,將用戶輸入的計算符號去掉,即經過+-*÷將輸入的式子,把數字分隔出來。再利用indexOf()來判斷是不是個分數。隨後,利用公式來進行分數的四則運算。以加法爲例:加法是通分來進行計算的。好比1/2+1/3,分子是1*3+1*2,分母是2*3,如下是代碼實現:
result=simplefraction(((Integer.parseInt(str1[0])*Integer.parseInt(str2[1]))
+(Integer.parseInt(str2[0])*Integer.parseInt(str1[1])))
,(Integer.parseInt(str1[1])*Integer.parseInt(str2[1])));
  • 此時獲得的是兩個單獨的數,即56。上面程序中的simplefraction()就是給計算出的兩個數進行約分與添加/的方法。約分的思想是先求出兩個數的最大公因子,如果1,就直接添加/;若不是1,則給每一個數都除以得出的最大公因子。

代碼實現

  • 以加法爲例的方法:
public void add(String s)//加法
    {
        String[] str=s.split("\\+");
        if(str[0].indexOf("/")>-1 || str[1].indexOf("/")>-1)//分數
        {
            String[] str1=str[0].split("[/]");
            String[] str2=str[1].split("[/]");
            if(Integer.parseInt(str1[1]) != 0 && Integer.parseInt(str2[1]) != 0)//分母不爲零
            {
                result =simplefraction(((Integer.parseInt(str1[0])*Integer.parseInt(str2[1]))
                        +(Integer.parseInt(str2[0])*Integer.parseInt(str1[1])))
                        ,(Integer.parseInt(str1[1])*Integer.parseInt(str2[1])));
            }else{
                throw new IllegalArgumentException("Divisor cannot be zero!");//除數爲零時拋出異常
            }
        }
        else{//整數
            if( Integer.parseInt(str[0])<1000&&Integer.parseInt(str[1])<1000&&Integer.parseInt(str[0])>-1000&&Integer.parseInt(str[1])>-1000)
            {
                result = Integer.parseInt(str[0])+Integer.parseInt(str[1])+"";
            }

            else{
                throw new IllegalArgumentException("overrun!");}//數值範圍超出時拋出異常
        }

 }

UML類圖

功能截圖

  • 此程序有如下幾個缺陷:git

    - 沒有考慮整數除以整數會得出真分數的狀況。
     - 沒有考慮整數與真分數進行運算的狀況。
     - 沒有考慮兩個以上的數進行運算的狀況。
     - 沒有考慮添加小括號後運算的優先級的狀況。
  • JUnit測試編程

結對感覺

  • 本週對程序進行了完善。以前只有對整數的四則運算,而本週添加了對於真分數的四則運算,並能夠將結果進行約分的較高級的功能。
  • 咱們因爲不知道怎麼處理真分數中的/,並如何將數字提取出來進行運算,因此借鑑了碼雲上一位大神的代碼。先將算式中的符號與真分數分隔,在經過indexOf把數字提取出來進行通分之類的運算,約分後再將/放回兩數之間,這樣的代碼實現使我和個人小夥伴收穫頗多,又掌握了一門新的技能。
  • 在這位大神程序的理解上,咱們有效地實現告終對的優勢,用紙筆進行推算,並在我不懂的地方,個人小夥伴給我進行講解,我解決了個人小夥伴看代碼中的疑問。

PSP表格

PSP Personal Software Process Stages 預估耗時(分鐘) 實際耗時(分鐘)
Planning 計劃 30 25
Estimate 估計這個任務須要多少時間 120 120
Development 開發 50 60
Analysis 需求分析(包括學習新技術) 50 30
Design Spec 生成設計文檔 60 60
Design Review 設計複審(和同事審覈設計文檔) 30 20
Coding Standard 代碼規範 (爲目前的開發制定合適的規範) 20 40
Design 具體設計 60 60
Coding 具體編碼 35 30
Code Review 代碼複審 15 15
Reporting 報告 60 60
Test Report 測試報告 30 45
Size Measurement 計算工做量 20 25
Postmortem & Process Improvement Plan 過後總結, 並提出過程改進計劃 10 15
合計 620 630
相關文章
相關標籤/搜索