實驗名稱: Java面向對象程序設計
實驗內容:
- 初步掌握單元測試和TDD
- 理解并掌握面向對象三要素:封裝、繼承、多態
- 初步掌握UML建模
- 熟悉S.O.L.I.D原則
了解設計模式
PSP時間
步驟 耗時 百分比 需求分析 1h 12.5% 設計 1h 12.5% 代碼實現 3h 37.5% 測試 1h 12.5% 分析總結 2h 25.0% 代碼實現過程
直接使用老師實驗課上給出的偽代碼。
m_dRealPart: 實部,代表復數的實數部分
m_dImaginPart: 虛部,代表復數的虛數部分
ComplexNumber() 構造函數,將實部,虛部都置為0
ComplexNumber(double r, double I) 構造函數,創建復數對象的同時完成復數的實部,虛部的初始化
GetRealPart() 獲取實部
GetImaginaryPart() 獲取虛部
SetRealPart(double d) 設置實部
SetImaginaryPart(double d) 設置虛部
ComplexAdd(ComplexNumber c) 復數相加
ComplexAdd(double c) 復數相加
ComplexMinus(ComplexNumber c) 復數相減
ComplexMinus(double c) 復數相減
ComplexMulti(ComplexNumber c) 復數相乘
ComplexMulti(double c) 復數相乘
toString() 把當前復數對象的實部,虛部組合成a+bi的字符串形式
根據復數運算的加減乘三個功能進行代碼設計。敲出產品代碼
package czy;
public class complex
{
public static void main (String args[])
{ComplexNumber a = new ComplexNumber(20,10);
ComplexNumber b = new ComplexNumber(5,5);double z = 10.0;System.out.println(a.toString() + " + " +b.toString() + " = " + a.complexAdd(b).toString());
System.out.println(a.toString() + " + " + z + " = " + a.complexAdd(z).toString());System.out.println(a.toString() + " - " + b.toString() + " = " + a.complexMinus(b).toString());
System.out.println(a.toString() + " - " + z + " = " + a.complexMinus(z).toString());System.out.println(a.toString() + " * " + b.toString() + " = " + a.complexMinus(b).toString());
System.out.println(a.toString() + " * " + z + " = " + a.complexMulti(z).toString());}
}class ComplexNumber
{
private double realpart;
private double imaginpart;
ComplexNumber()
{realpart = 0.0;imaginpart = 0.0;
}
ComplexNumber(double r,double I)
{realpart = r;imaginpart = I;
}
ComplexNumber(ComplexNumber c)
{realpart = c.getRealPart();imaginpart = c.getImaginaryPart();
}
double getRealPart()
{return realpart;
}
double getImaginaryPart()
{return imaginpart;
}
void setRealPart(double d)
{realpart = d;
}
void setImaginaryPart(double d)
{imaginpart = d;
}
ComplexNumber complexAdd(ComplexNumber c)
{return new ComplexNumber( this.realpart + c.getRealPart(), this.imaginpart + c.getImaginaryPart());
}
ComplexNumber complexAdd(double c)
{return new ComplexNumber( this.realpart + c, this.imaginpart);
}ComplexNumber complexMinus(ComplexNumber c)
{return new ComplexNumber( this.realpart - c.getRealPart(),this.imaginpart - c.getImaginaryPart());
}
ComplexNumber complexMinus(double c)
{return new ComplexNumber( this.realpart - c, this.imaginpart);
}ComplexNumber complexMulti(ComplexNumber c)
{return new ComplexNumber( this.realpart * c.getRealPart() - this.realpart * c.getImaginaryPart(),this.realpart * c.getImaginaryPart() + this.imaginpart * c.getRealPart());
}
ComplexNumber complexMulti(double c)
{return new ComplexNumber( this.realpart * c, this.imaginpart * c);
}public String toString()
{return "(" + realpart + " + " + imaginpart + " i" + ")";}
}
完成后進行測試代碼:
package czy;
public class complextest {public static void main (String args[]){ComplexNumber a = new ComplexNumber(20,10);ComplexNumber b = new ComplexNumber(5,5);ComplexNumber x = new ComplexNumber();double z = 10.0;x = a.complexAdd(b);if(x.getRealPart() !=25.0 )System.out.println("test failed 1!");x = a.complexAdd(z);if(x.getRealPart() !=30.0 )System.out.println("test failed 11!");x = a.complexAdd(b);if( x.getImaginaryPart()!=15.0 )System.out.println("test failed 2!");x = a.complexAdd(z);if( x.getImaginaryPart()!=10.0 )System.out.println("test failed 22!");x = a.complexMinus(b);if( x.getRealPart()!=15.0 )System.out.println("test failed 3!");x = a.complexMinus(z);if( x.getRealPart()!=10.0 )System.out.println("test failed 33!");x = a.complexMinus(b);if( x.getImaginaryPart()!=5.0 )System.out.println("test failed 4!");x = a.complexMinus(z);if( x.getImaginaryPart()!=10.0 )System.out.println("test failed 44!");x = a.complexMulti(b);if( x.getRealPart() !=50.0 )System.out.println(x.getRealPart()+"test failed 5!");x = a.complexMulti(z);if( x.getRealPart() !=200.0 )System.out.println("test failed 55!");x = a.complexMulti(b); if( x.getImaginaryPart()!=150.0 )System.out.println("test failed 6!");x = a.complexMulti(z); if( x.getImaginaryPart()!=100.0 )System.out.println("test failed 66!");else System.out.println("test passed!"); }}class ComplexNumber{private double realpart;private double imaginpart;ComplexNumber(){realpart = 0.0;imaginpart = 0.0;}ComplexNumber(double r,double I){realpart = r;imaginpart = I;}ComplexNumber(ComplexNumber c){realpart = c.getRealPart();imaginpart = c.getImaginaryPart();}double getRealPart(){return realpart;}double getImaginaryPart(){return imaginpart;}void setRealPart(double d){realpart = d;}void setImaginaryPart(double d){imaginpart = d;}ComplexNumber complexAdd(ComplexNumber c){return new ComplexNumber( this.realpart + c.getRealPart(), this.imaginpart + c.getImaginaryPart());}ComplexNumber complexAdd(double c){return new ComplexNumber( this.realpart + c, this.imaginpart);}ComplexNumber complexMinus(ComplexNumber c){return new ComplexNumber( this.realpart - c.getRealPart(),this.imaginpart - c.getImaginaryPart());}ComplexNumber complexMinus(double c){return new ComplexNumber( this.realpart - c, this.imaginpart);}ComplexNumber complexMulti(ComplexNumber c){return new ComplexNumber( this.realpart * c.getRealPart() - this.realpart * c.getImaginaryPart(),this.realpart * c.getImaginaryPart() + this.imaginpart * c.getRealPart());}ComplexNumber complexMulti(double c){return new ComplexNumber( this.realpart * c, this.imaginpart * c );}public String toString(){return "(" + realpart + " + " + imaginpart + " i" + ")";}
}
運行的時候出現了問題!
找到出錯的地方,將關于復數乘法的代碼改為:
ComplexNumber complexMulti(ComplexNumber c)
{
return new ComplexNumber( this.realpart * c.getRealPart() - this.imaginpart * c.getImaginaryPart(),
this.realpart * c.getImaginaryPart() + this.imaginpart * c.getRealPart());
}
成功!
實驗問題和解決方法
實驗過程關于復數算法出現了一些錯誤,但寫了測試代碼后成功進行了修改。還有如果用debug的話可能方便一些。
測試代碼的好處
使用測試代碼后會減少程序出現的bug,在符合客戶需求的情況下使代碼更加完善,也能鍛煉我們的思維,增強我們認真負責的意識,一舉多得。