20172301 2017-2018-2 《程序設計與數據結構》課堂測試修改報告
20172301 2017-2018-2 《程序設計與數據結構》課堂測試修改報告
課程:《程序設計與數據結構》
班級: 1723
姓名: 郭愷
學號: 20172301
實驗教師:王誌強老師
測試日期:2018年4月11日
必修/選修: 必修
測試內容
書P241 PP7.4
- 首先,修改RationalNumber類, 實現 Comparable接口。
- 然後以0.0001為誤差精度進行比較。
- 編寫main驅動方法進行測試。
測試過程及結果
設計思路:我們要想實現Comparable接口,必須要進行compareTo方法的編寫。而根據浮點數比較的原則,我們需要定義一個誤差精度0.0001。
實現接口Comparable
根據題目,首先我們需要實現接口:
- 編寫compareTo方法
- 第一步,因為compareTo對象是obj,所以首先我們需要進行類型轉換,把其變為RationalNumber類型。
- 第二步,因為我們比較的是兩個分數,所以求差我們就可以調用RationalNumber類中的subtract方法,把兩個分數進行相減。
- 第三步,因為我們相減得出的是分數,如何和0.0001比較,就需要把分數轉換為小數。我們可以通過調用RationalNumber類中的getNumerator()和getDenominator()方法相除得出結果。
- 這裏要註意的是,getNumerator()和getDenominator()方法都是int型
- 這裏要註意的是,getNumerator()和getDenominator()方法都是int型
- 第四步,我們需要把結果取絕對值。
書P145:
判斷兩個浮點數相等的一個較好的方法是:計算兩個數差的 絕對值並將差和 某個誤差標準相比較。
這裏調用
Math.abs()
- 第五步,結果和0.0001進行比較。
- 比較就需要我們用到條件語句if。
我們會有兩種結果:
if (a<0.0001 && a >= 0) return 0; // 等於 else return -1; // 不等於
那麽這樣compareTo就編寫完成了。截圖:
編寫main驅動方法,測試 :
結果:
測試過程中遇到的問題和解決過程
- 問題1:重寫了compareTo方法,沒有實現接口,程序依然能夠運行,沒有提示錯誤。
問題1解決方案: 實現接口,必須要重寫compareTo 方法;但是重寫方法,不一定要實現接口。 所以,我就忘記實現接口。盡管,接口似乎沒有作用
是我理解不了,但是我們應該養成習慣。實現接口,重寫方法。- 問題2:浮點數比較。
問題2解決方案:浮點數比較,是比較其是否相等,而不是比較他們的大小。不然直接相減不就好了。我這道題在題意理解上就存在問題,這與程序編寫錯誤有很大關系。
我們在編寫程序,首先要明確我們需要完成什麽,要讓程序執行什麽錯誤,不要一上來就弄錯了方向。合適確定軟件的需求,有一個好的開端,實際上就是成功了一半。
其他(感悟、思考等)
?? 實際上,這次程序的編寫並不完美。首先,我在開始的時候就犯下了錯誤,沒有明確程序需要執行的任務,導致方法編寫錯誤,main驅動方法編寫錯誤。然後,雖然重寫了compareTo方法,卻沒有實現接口,也是沒有理解題意的緣故。所以,這次之後,我認為給我印象最深刻的就應該是細心。 同時,這是老師布置的作業,一方面,我對自己的程序理解不清,另一方面,是對教材的掌握不過全面。希望自己可以謹記這次教訓,再接再厲。
參考資料:
- 《Java程序設計與數據結構教程(第二版)》
- 《Java程序設計與數據結構教程(第二版)》學習指導
20172301 2017-2018-2 《程序設計與數據結構》課堂測試修改報告