一、实验目的和要求

1. 掌握类的构造函数的重载

2. 深入理解类和对象

3. 学习NetBeans中UML项目的创建类并生成相应代码的方法

二、实验内容和原理

设计一个复数类,能够完成复数之间的基本运算,重写方法toString(),使其能输出此复数(形式为: 实部 +

虚部i)。

要求设计的复数类必须有三个构造函数,分别为无参数、1个参数和2个参数的构造函数,完成的基本运算包括两个复数的加、减、乘、除法和变换了共轭复数。

三、实验环境

1. 硬件环境:

2. 软件环境:JDK1.5

四、算法描述及实验步骤

1. 算法描述(可以用类图、流程图、伪代码或源程序描述)

// 
defaultstate="collapsed"
desc=" UML Marker
">
// #[regen=yes,id=DCE.F8FC8053-E55E-A34D-0AF8-02D0DD165058]
// 
public class Complex {
// 
defaultstate="collapsed"
desc=" UML Marker
">
// #[regen=yes,id=DCE.C06F703D-1D60-441C-4B74-FD6E0836E3E5]
// 
private double realPart;
// 
defaultstate="collapsed"
desc=" UML Marker
">
// #[regen=yes,id=DCE.F17485F9-2EBB-5423-B3C4-DDF67DC4EB9C]
// 
private double imaginaryPart;
// 
defaultstate="collapsed"
desc=" UML Marker
">
// #[regen=yes,id=DCE.768D1F18-B021-3EA2-C611-0AC7067D4D5D]
// 
public Complex () {
this.realPart =0.0;
this.imaginaryPart =0.0;
}
// 
defaultstate="collapsed"
desc=" UML Marker
">
// #[regen=yes,id=DCE.768D1F18-B021-3EA2-C611-0AC7067D4D5D]
// 
public Complex (double realPart) {
this.realPart =realPart;
this.imaginaryPart =0;
}
// 
defaultstate="collapsed"
desc=" UML Marker
">
// #[regen=yes,id=DCE.768D1F18-B021-3EA2-C611-0AC7067D4D5D]
// 
public Complex (double realPart,double imaginaryPart) {
this.realPart =realPart;
this.imaginaryPart =imaginaryPart;
}
// 
defaultstate="collapsed"
desc=" UML Marker
">
//
#[regen=yes,regenBody=yes,id=DCE.BA9D7803-2BD4-06DE-3A6A-DA81BE1F2344]
// 
public double getImaginaryPart () {
return imaginaryPart;
}
// 
defaultstate="collapsed"
desc=" UML Marker
">
//
#[regen=yes,regenBody=yes,id=DCE.AB9E1CF6-8573-F128-6A5D-AC31A073FB01]
// 
public void setImaginaryPart (double val) {
this.imaginaryPart = val;
}
// 
defaultstate="collapsed"
desc=" UML Marker
">
//
#[regen=yes,regenBody=yes,id=DCE.DD7854FA-1558-9C47-5B90-6EB2C9E2811F]
// 
public double getRealPart () {
return realPart;
}
// 
defaultstate="collapsed"
desc=" UML Marker
">
//
#[regen=yes,regenBody=yes,id=DCE.C3FA0473-7185-A714-7D0D-024945226920]
// 
public void setRealPart (double val) {
this.realPart = val;
}
// 
defaultstate="collapsed"
desc=" UML Marker
">
// #[regen=yes,id=DCE.E6DF5202-BB60-859A-8051-1D66DA0416F7]
// 
//(a+bi)+(c+di)=(a+c)+(b+d)i,
public Complex plus (Complex complex) {
Complex result =new Complex();
result.realPart =this.realPart +complex.realPart;
result.imaginaryPart =this.imaginaryPart
+complex.imaginaryPart;
return result;
}
// 
defaultstate="collapsed"
desc=" UML Marker
">
// #[regen=yes,id=DCE.87B6B9AF-4F85-E52F-58C9-50A34A15E3C5]
// 
//a+bi)-(c+di)=(a-c)+(b-d)i,
public Complex minus (Complex complex) {
Complex result =new Complex();
result.realPart =this.realPart -complex.realPart;
result.imaginaryPart =this.imaginaryPart
-complex.imaginaryPart;
return result;
}
// 
defaultstate="collapsed"
desc=" UML Marker
">
// #[regen=yes,id=DCE.A69EDF28-C837-FC27-F021-671D5105CF13]
// 
//a+bi)•(c+di)=(ac-bd)+(bc+ad)i,
public Complex times (Complex complex) {
Complex result =new Complex();
result.realPart =(this.realPart *complex.realPart
-this.imaginaryPart*complex.imaginaryPart);
result.imaginaryPart =this.imaginaryPart *complex.realPart
+this.realPart*complex.imaginaryPart;
return result;
}
// 
defaultstate="collapsed"
desc=" UML Marker
">
// #[regen=yes,id=DCE.1A02A446-C52F-B020-4DBC-140FFE6388FA]
// 
//(a+bi)÷(c+di)=[(ac+bd) / (c^2+d^2)]+[(bc-ad) / (c^2+d^2)]
i,同时(c与d不同时为零)
public Complex divideBy (Complex complex) {
Complex result =new Complex();
//如何表达不同时等于0
//
if(complex.realPart==0&&complex.imaginaryPart!=0||complex.imaginaryPart==0&&complex.realPart
!=0){
result.realPart =(this.realPart *complex.realPart
+this.imaginaryPart*complex.imaginaryPart) /
(complex.realPart*complex.realPart +complex.imaginaryPart
*complex.imaginaryPart);
result.imaginaryPart =(this.imaginaryPart *complex.realPart
-this.realPart*complex.imaginaryPart) /
(complex.realPart*complex.realPart +complex.imaginaryPart
*complex.imaginaryPart);
//}
return result;
}
// 
defaultstate="collapsed"
desc=" UML Marker
">
// #[regen=yes,id=DCE.1A11749A-A535-C812-2AB9-22C01126A2E6]
// 
//z=a+bi是一个复数,则称复数z‘=a-bi为z的共轭复数
public Complex conjugate () {
Complex result =new Complex();
result.realPart =this.realPart;
result.imaginaryPart =(-1)*this.imaginaryPart;
return result;
}
// 
defaultstate="collapsed"
desc=" UML Marker
">
// #[regen=yes,id=DCE.0A00AB3E-0315-D442-503F-655C453B5A4A]
// 
public String toString () {
if(this.imaginaryPart>=0){
return this.realPart +
"+"+this.imaginaryPart +
"i";
}
else{
return this.realPart +this.imaginaryPart +
"i";
}
}
}

2. 实验步骤

l 创建一个UML项目,并设计类Complex如下图

l 创建一个Java应用项目

l 把UML项目中的Complex自动生成代码到Java应用项目中

l 实现Complex类中的方法

l 进行编译

l 进行测试,使用的测试用例:

输入:(),(1),(1,2),(3,4)

预期输出:复数a:0.0+0.0i

复数b:1.0+0.0i

复数c:1.0+2.0i

复数d:3.0+4.0i

复数相加:4.0+6.0i

复数相减2.0+2.0i

复数相乘:-5.0+10.0i

复数相除2.2-0.4i

复数共轭:3.0-4.0

输入:(),(1),(0,0),(1,2)

预期输出:复数a:0.0+0.0i

复数b:1.0+0.0i

复数c:0.0+0.0i

复数d:1.0+2.0i

复数相加:1.0+2.0i

复数相减1.0+2.0i

复数相乘:0.0+0.0i

复数相除null

复数共轭:1.0-2.0i

输入:(),(1),(3,4),(1,2)

预期输出:复数a:0.0+0.0i

复数b:1.0+0.0i

复数c:3.0+4.0i

复数d:1.0+2.0i

复数相加:4.0+6.0i

复数相减-2.0-2.0i

复数相乘:-5.0+10.0i

复数相除0.44+0.08i

复数共轭:1.0-2.0i

java常用类实验总结 java实验类与对象_sed

五、调试过程

1. 编译过程

记录算法实现中发现的语法错误及改正

2. 调试过程

记录算法实现中发现的逻辑错误及改正,对每个测试用例,记录实际输出,并与预期输出进行比较,如果不同,分析产生错误的原因并改正。

输入:(),(1),(1,2),(3,4)

预期输出:复数a:0.0+0.0i

复数b:1.0+0.0i

复数c:1.0+2.0i

复数d:3.0+4.0i

复数相加:4.0+6.0i

复数相减2.0+2.0i

复数相乘:-5.0+10.0i

复数相除2.2-0.4i

复数共轭:3.0-4.0i

实际输出:复数a:0.0+0.0i

复数b:1.0+0.0i

复数c:1.0+2.0i

复数d:3.0+4.0i

复数相加:4.0+6.0i

复数相减2.0+2.0i

复数相乘:-5.0+10.0i

复数相除1.8000000000000003i

复数共轭:-1.0i

分析:因为tostring()函数写错了,把return this.realPart +this.imaginaryPart +

"i";改为return this.realPart

+""+this.imaginaryPart +

"i";即可

输入:(),(1),(0,0),(1,2)

预期输出:复数a:0.0+0.0i

复数b:1.0+0.0i

复数c:0.0+0.0i

复数d:1.0+2.0i

复数相加:1.0+2.0i

复数相减1.0+2.0i

复数相乘:0.0+0.0i

复数相除null

复数共轭:1.0-2.0i

实际输出:复数a:0.0+0.0i

复数b:1.0+0.0i

复数c:0.0+0.0i

复数d:1.0+2.0i

复数相加:1.0+2.0i

复数相减1.0+2.0i

复数相乘:0.0+0.0i

复数相除NaNNaNi

复数共轭:1.0-2.0i

分析: (a+bi)÷(c+di)=[(ac+bd) / (c^2+d^2)]+[(bc-ad) / (c^2+d^2)]

i,同时(c与d不同时为零),所以在public Complex divideBy (Complex

complex)中添加个if……else……语句。

输入:(),(1),(3,4),(1,2)

预期输出:复数a:0.0+0.0i

复数b:1.0+0.0i

复数c:3.0+4.0i

复数d:1.0+2.0i

复数相加:4.0+6.0i

复数相减-2.0-2.0i

复数相乘:-5.0+10.0i

复数相除0.44+0.08i

复数共轭:1.0-2.0i

实际输出:复数a:0.0+0.0i

复数b:1.0+0.0i

复数c:3.0+4.0i

复数d:1.0+2.0i

复数相加:4.0+6.0i

复数相减-2.0-2.0i

复数相乘:-5.0+10.0i

复数相除0.44+0.08i

复数共轭:1.0-2.0i

分析:预计输出和实际输出一致。

六、实验结果

用与测试用例不同的输入数据运行算法,写出得到的结果,并分析结果是否正确。

输入:(),(1),(-3,4),(1,-2)

输出结果:复数a:0.0+0.0i

复数b:1.0+0.0i

复数c:-3.0+4.0i

复数d:1.0-2.0i

复数相加:-2.0+2.0i

复数相减4.0-6.0i

复数相乘:5.0+10.0i

复数相除-0.44+0.08i

复数共轭:1.0+2.0i

结果分析:实验结果正确。

七、总结

通过这次实验,懂得了要知道如何调试,本次实验不难,但是我还是调试了好久,方法都没错,就在tostring()的重写上出错,虽然考虑到虚数要是负数的特殊情况,但在表达式上没写好,导致实验结果一直不正确,而我还老是在方法内找原因。还是要多多写代码提高自己。

附录:

// 
defaultstate="collapsed"
desc=" UML Marker
">
// #[regen=yes,id=DCE.F8FC8053-E55E-A34D-0AF8-02D0DD165058]
// 
public class Complex {
// 
defaultstate="collapsed"
desc=" UML Marker
">
// #[regen=yes,id=DCE.C06F703D-1D60-441C-4B74-FD6E0836E3E5]
// 
private double realPart;
// 
defaultstate="collapsed"
desc=" UML Marker
">
// #[regen=yes,id=DCE.F17485F9-2EBB-5423-B3C4-DDF67DC4EB9C]
// 
private double imaginaryPart;
// 
defaultstate="collapsed"
desc=" UML Marker
">
// #[regen=yes,id=DCE.768D1F18-B021-3EA2-C611-0AC7067D4D5D]
// 
public Complex () {
this.realPart =0.0;
this.imaginaryPart =0.0;
}
// 
defaultstate="collapsed"
desc=" UML Marker
">
// #[regen=yes,id=DCE.768D1F18-B021-3EA2-C611-0AC7067D4D5D]
// 
public Complex (double realPart) {
this.realPart =realPart;
this.imaginaryPart =0;
}
// 
defaultstate="collapsed"
desc=" UML Marker
">
// #[regen=yes,id=DCE.768D1F18-B021-3EA2-C611-0AC7067D4D5D]
// 
public Complex (double realPart,double imaginaryPart) {
this.realPart =realPart;
this.imaginaryPart =imaginaryPart;
}
// 
defaultstate="collapsed"
desc=" UML Marker
">
//
#[regen=yes,regenBody=yes,id=DCE.BA9D7803-2BD4-06DE-3A6A-DA81BE1F2344]
// 
public double getImaginaryPart () {
return imaginaryPart;
}
// 
defaultstate="collapsed"
desc=" UML Marker
">
//
#[regen=yes,regenBody=yes,id=DCE.AB9E1CF6-8573-F128-6A5D-AC31A073FB01]
// 
public void setImaginaryPart (double val) {
this.imaginaryPart = val;
}
// 
defaultstate="collapsed"
desc=" UML Marker
">
//
#[regen=yes,regenBody=yes,id=DCE.DD7854FA-1558-9C47-5B90-6EB2C9E2811F]
// 
public double getRealPart () {
return realPart;
}
// 
defaultstate="collapsed"
desc=" UML Marker
">
//
#[regen=yes,regenBody=yes,id=DCE.C3FA0473-7185-A714-7D0D-024945226920]
// 
public void setRealPart (double val) {
this.realPart = val;
}
// 
defaultstate="collapsed"
desc=" UML Marker
">
// #[regen=yes,id=DCE.E6DF5202-BB60-859A-8051-1D66DA0416F7]
// 
//(a+bi)+(c+di)=(a+c)+(b+d)i,
public Complex plus (Complex complex) {
Complex result =new Complex();
result.realPart =this.realPart +complex.realPart;
result.imaginaryPart =this.imaginaryPart
+complex.imaginaryPart;
return result;
}
// 
defaultstate="collapsed"
desc=" UML Marker
">
// #[regen=yes,id=DCE.87B6B9AF-4F85-E52F-58C9-50A34A15E3C5]
// 
//a+bi)-(c+di)=(a-c)+(b-d)i,
public Complex minus (Complex complex) {
Complex result =new Complex();
result.realPart =this.realPart -complex.realPart;
result.imaginaryPart =this.imaginaryPart
-complex.imaginaryPart;
return result;
}
// 
defaultstate="collapsed"
desc=" UML Marker
">
// #[regen=yes,id=DCE.A69EDF28-C837-FC27-F021-671D5105CF13]
// 
//a+bi)•(c+di)=(ac-bd)+(bc+ad)i,
public Complex times (Complex complex) {
Complex result =new Complex();
result.realPart =(this.realPart *complex.realPart
-this.imaginaryPart*complex.imaginaryPart);
result.imaginaryPart =this.imaginaryPart *complex.realPart
+this.realPart*complex.imaginaryPart;
return result;
}
// 
defaultstate="collapsed"
desc=" UML Marker
">
// #[regen=yes,id=DCE.1A02A446-C52F-B020-4DBC-140FFE6388FA]
// 
//(a+bi)÷(c+di)=[(ac+bd) / (c^2+d^2)]+[(bc-ad) / (c^2+d^2)]
i,同时(c与d不同时为零)
public Complex divideBy (Complex complex) {
Complex result =new Complex();
if(!(complex.realPart==0&&complex.imaginaryPart==0)){
result.realPart =(this.realPart *complex.realPart
+this.imaginaryPart*complex.imaginaryPart) /
(complex.realPart*complex.realPart +complex.imaginaryPart
*complex.imaginaryPart);
result.imaginaryPart =(this.imaginaryPart *complex.realPart
-this.realPart*complex.imaginaryPart) /
(complex.realPart*complex.realPart +complex.imaginaryPart
*complex.imaginaryPart);
return result;
}
else
return null;
}
// 
defaultstate="collapsed"
desc=" UML Marker
">
// #[regen=yes,id=DCE.1A11749A-A535-C812-2AB9-22C01126A2E6]
// 
//z=a+bi是一个复数,则称复数z‘=a-bi为z的共轭复数
public Complex conjugate () {
Complex result =new Complex();
result.realPart =this.realPart;
result.imaginaryPart =(-1)*this.imaginaryPart;
return result;
}
// 
defaultstate="collapsed"
desc=" UML Marker
">
// #[regen=yes,id=DCE.0A00AB3E-0315-D442-503F-655C453B5A4A]
// 
public String toString () {
if(this.imaginaryPart>=0){
return this.realPart +
"+"+this.imaginaryPart +
"i";
}
else{
return this.realPart
+""+this.imaginaryPart +
"i";
}
}
}
import static java.lang.System.out;
public class NewClass {
public static void main(String[] args){
Complex a =new Complex();
Complex b =new Complex(1);
Complex c =new Complex(-3,4);
Complex d =new Complex(1,-2);
out.println("复数a:"+a);
out.println("复数b:"+b);
out.println("复数c:"+c);
out.println("复数d:"+d);
out.println("复数相加:"+d.plus(c));
out.println("复数相减"+d.minus(c));
out.println("复数相乘:"+d.times(c));
out.println("复数相除"+d.divideBy(c));
out.println("复数共轭:"+d.conjugate());
}
}