20172302 2017-2018-2 《程序設計與數據結構》實驗二報告

課程:《程序設計與數據結構》

班級: 1723

姓名: 侯澤洋

學號:20172302

實驗教師:王志強老師

實驗日期:2018年4月18日

必修/選修: 必修

1.實驗內容

  • 初步掌握單元測試和TDDhtml

  • 理解並掌握面向對象三要素:封裝、繼承、多態java

  • 初步掌握UML建模git

  • 熟悉S.O.L.I.D原則編程

  • 瞭解設計模式設計模式

  • 完成藍墨雲上 (1)-(5)實驗。數據結構

2.實驗過程及結果

  • (1).完成5個實驗,課上完成兩個,課下完成三個。ide

  • (2).第一個實驗:學習並瞭解單元測試;認識編程中三種碼:僞代碼、產品代碼、測試代碼;接下來就是開始實驗,對咱們所編寫的類進行測試,這個實驗實驗中咱們共完成了三種測試,分別是:測試正常、測試異常、測試邊界;
public class MyUtil{
   public static String percentage2fivegrade(int grade){
       //若是成績小於0,轉成「錯誤」
       if ((grade < 0))
           return "錯誤";
       //若是成績小於60,轉成「不及格」
       else if (grade < 60)
           return "不及格";
       //若是成績在60與70之間,轉成「及格」
       else if (grade < 70)
           return "及格";
       //若是成績在70與80之間,轉成「中等」
       else if (grade < 80)
           return "中等";
       //若是成績在80與90之間,轉成「良好」
       else if (grade < 90)
           return "良好";
       //若是成績在90與100之間,轉成「優秀」
       else if (grade <= 100)
           return "優秀";
       //若是成績大於100,轉成「錯誤」
       else
           return "錯誤";
   }
}

接下來就是完成實驗測試,使用Junit完成上述的三個測試。實驗項目一代碼連接1,實驗項目一代碼連接2函數

  • (3).進行第二個實驗:學習使用StringBuffer類,從API文檔上查閱了StringBuffer類的一些方法,並完成相關測試,使用JUnit完成了單元測試,實驗項目二代碼連接,下圖是實驗結果:
    單元測試

  • (4).第三個實驗:在這裏讀錯了題目,覺得是要將所列的類都要進行代碼補充,後來改了回來,對本身學號%6取餘結果爲2,故完成了(2)Boolean類,在MyDoc中也添加了測試代碼,這裏經學長指正作了修改,參見問題6修改後代碼連接學習

  • (5).第四個實驗:以TOD的方式開發複數類,並完成這些要求:

// 定義屬性並生成getter,setter
double RealPart;
double ImagePart;
// 定義構造函數
public Complex()
public Complex(double R,double I)

//Override Object
public boolean equals(Object obj)
public String toString()

// 定義公有方法:加減乘除
Complex ComplexAdd(Complex a)
Complex ComplexSub(Complex a)
Complex ComplexMulti(Complex a)
Complex ComplexDiv(Complex a)

作這個實驗花的時間比較長,對複數運算還算清楚,但在編寫代碼時也花了力氣設計出來代碼,實驗四代碼連接1,實驗四代碼連接2.最後實驗結果以下:

  • (6).最後一個實驗:這個實驗參考資料上沒有將WhiteStarUML的具體使用方法,作起來也比較費時,網上也沒有找到教程,最後就是亂點一點點的試,實驗還算作完了,結果如圖:

3. 實驗過程當中遇到的問題和解決過程

  • 問題1:在使用Junit時切換了字符集,遇到字符集錯誤,也就是亂碼了,致使之前的許多程序也不能再運行,具體見下圖:

  • 問題1解決方案:這裏是在課上,就隨即問了學長,學長也沒有解決,但注意到了學長在調換字符集,後面本身就是亂嘗試,當把字符集切換成US-ASCII時,終於又調了回來,後來課上老師也給出瞭解決方案,但好像是不太同樣。

  • 問題2:一個小錯誤,在使用Junit進行測試時,有三個測試,但只有兩個測試顯示經過,另一個始終沒有反應,不顯示經過或失敗。

  • 問題2解決方案:後來還上去找老師問了問,老師檢查完看出了編寫錯誤,把test寫成了text,致使那個測試始終沒有運行,修改以後正常。到如今還在犯拼寫錯誤,之後本身再想老師學長問問題時必定要多檢查幾遍,不要出現編寫錯誤去讓別人檢查。

  • 問題3:就是關於實驗項目四中的Complex編寫,先是小問題,return語句始終加紅線錯誤,不明白是錯在哪裏了,見下圖:

  • 問題3解決方案:關於這種複數形式,我想起了以前的第七章例題那個分數運算,而後翻書找了那個書上的代碼,編寫的狀況以下(這裏取一小段說明):
public RationalNumber add(RationalNumber op2)
   {
     int commonDenominator = denominator * op2.getDenominator();
     int numerator1 = numerator * op2.getDenominator();
     int numerator2 = op2.getNumerator() * denominator;
     int sum = numerator1 + numerator2;

     return new RationalNumber(sum,commonDenominator);
   }

這時便發現了個人錯誤在哪,個人return語句中缺乏new運算符,加上以後,語句變爲return new Complex(RealPart,ImagePart);,這樣紅線消失,繼續編寫。

  • 問題4:繼續編寫Complex類,又出現了問題,具體狀況見下圖:

  • 問題4解決方案:這裏其實首先是在測試時結果不正確,但在那裏不太好分析,我就又寫了mycomplex類用來實現這個Complex類,並對它進行了Debug調試,在這裏到了作運算的這一步,就點了step into,進入裏面一步步進行,進去以後調了好幾遍才發現問題。拿這個爲例,我原本沒有寫double realpart = Realpart ;這條語句,而是直接這樣的語句:
RealPart = RealPart*obj.RealPart-ImagePart*obj.ImagePart;
ImagePart = RealPart*obj.ImagePart+ImagePart*obj.RealPart;
return new Complex(RealPart,ImagePart);

這樣的錯誤是什麼呢,就是我把作完操做、已經發生改變的RealPart代入到了下面的一條語句,而下面的語句須要的是我最初的那個RealPart,這裏就發生了錯誤,因而就新建一個變量,讓它等於最初的RealPart,而後把它用到下面的這條語句中,這時就能夠保證咱們想要的結果了。

  • 問題5:遇到的還有這個問題,就是兩個結果是同樣,可是那個預測結果和實際結果顯示出來的包是不同的,也就是兩個數據類型不一樣,測試不經過。

  • 問題5解決方案:這個在藍墨雲上進行了提問,班主任的解答是這樣,可是並無給出答案,如何修改,最後是看了下別人的最後的這個類型轉換,我也去查了查這個類型轉換,最後是修改了這個語句assertEquals(3.0+"+5.0i",String.valueOf(a.ComplexAdd(c)));這樣就測試經過,實驗完成。查到的數據類型轉換,已附到參考連接中

  • 問題6:藍墨雲實驗提交後,實驗三學長指出其中存在的錯誤,按照學號取餘20172302%6 = 2,我對應的應該是Boolean類,按照需求,Boolean類應對應Boolean類型的值。

  • 問題6解決方案:這裏對學長提出的進行了改正,將數據類型改成了Boolean類型,完成修改,修改後截圖:

其餘(感悟、思考等)

  • 這周的實驗花了不少時間,幸虧書上的章節並非很難,那個完成的比較快,纔有時間去完成這些實驗,每次實驗都是比較費力勞神的感受,並且這一次一下留了5個實驗,感受任務量有點大,最主要的有的實驗本身怎麼作就是有錯誤,而別人那不須要調就能夠直接進行,這就比較心急,越作越慌,此次實驗作到後面還算好一點,但第四個實驗作了很久才弄出來.

  • 後記:後面再翻看其餘同窗碼雲時,發現本身實驗四編寫的較爲麻煩一些,之後要注意簡化代碼,同時實驗三也是出現了錯誤,後作修改。

參考資料

相關文章
相關標籤/搜索