1. 程式人生 > >20172301 2017-2018-2 《程序設計與數據結構》課堂測試修改報告

20172301 2017-2018-2 《程序設計與數據結構》課堂測試修改報告

get sub mage info 會有 eno 編寫程序 條件 urn

20172301 2017-2018-2 《程序設計與數據結構》課堂測試修改報告

課程:《程序設計與數據結構》
班級: 1723
姓名: 郭愷
學號: 20172301
實驗教師:王誌強老師
測試日期:2018年4月11日
必修/選修: 必修

測試內容

書P241 PP7.4

  • 首先,修改RationalNumber類, 實現 Comparable接口。
  • 然後以0.0001為誤差精度進行比較。
  • 編寫main驅動方法進行測試。

測試過程及結果

設計思路:我們要想實現Comparable接口,必須要進行compareTo方法的編寫。而根據浮點數比較的原則,我們需要定義一個誤差精度0.0001。

  1. 實現接口Comparable


    根據題目,首先我們需要實現接口:
    技術分享圖片

  2. 編寫compareTo方法
    • 第一步,因為compareTo對象是obj,所以首先我們需要進行類型轉換,把其變為RationalNumber類型。
    • 第二步,因為我們比較的是兩個分數,所以求差我們就可以調用RationalNumber類中的subtract方法,把兩個分數進行相減
    • 第三步,因為我們相減得出的是分數,如何和0.0001比較,就需要把分數轉換為小數。我們可以通過調用RationalNumber類中的getNumerator()和getDenominator()方法相除得出結果。
      • 這裏要註意的是,getNumerator()和getDenominator()方法都是int型
        的,而我們最後需要得出的結果是double型的,所以我們需要進行數據強制轉換
    • 第四步,我們需要把結果取絕對值
      • 書P145:

        判斷兩個浮點數相等的一個較好的方法是:計算兩個數差的 絕對值並將差和 某個誤差標準相比較。

      • 這裏調用Math.abs()

    • 第五步,結果和0.0001進行比較
      • 比較就需要我們用到條件語句if。
      • 我們會有兩種結果:

        if (a<0.0001 && a >= 0)
         return 0;    // 等於
           else
         return -1;   // 不等於

        那麽這樣compareTo就編寫完成了。截圖:
        技術分享圖片

  3. 編寫main驅動方法,測試 :
    技術分享圖片

  4. 結果:


    技術分享圖片

測試過程中遇到的問題和解決過程

  • 問題1:重寫了compareTo方法,沒有實現接口,程序依然能夠運行,沒有提示錯誤。
  • 問題1解決方案: 實現接口,必須要重寫compareTo 方法;但是重寫方法,不一定要實現接口。 所以,我就忘記實現接口。盡管,接口似乎沒有作用是我理解不了,但是我們應該養成習慣。實現接口,重寫方法。

  • 問題2:浮點數比較。
  • 問題2解決方案:浮點數比較,是比較其是否相等,而不是比較他們的大小。不然直接相減不就好了。我這道題在題意理解上就存在問題,這與程序編寫錯誤有很大關系。
    我們在編寫程序,首先要明確我們需要完成什麽,要讓程序執行什麽錯誤,不要一上來就弄錯了方向。合適確定軟件的需求,有一個好的開端,實際上就是成功了一半。

其他(感悟、思考等)

?? 實際上,這次程序的編寫並不完美。首先,我在開始的時候就犯下了錯誤,沒有明確程序需要執行的任務,導致方法編寫錯誤,main驅動方法編寫錯誤。然後,雖然重寫了compareTo方法,卻沒有實現接口,也是沒有理解題意的緣故。所以,這次之後,我認為給我印象最深刻的就應該是細心。 同時,這是老師布置的作業,一方面,我對自己的程序理解不清,另一方面,是對教材的掌握不過全面。希望自己可以謹記這次教訓,再接再厲

參考資料:

  • 《Java程序設計與數據結構教程(第二版)》
  • 《Java程序設計與數據結構教程(第二版)》學習指導

20172301 2017-2018-2 《程序設計與數據結構》課堂測試修改報告