java实验 类和对象_java 实验(三) 类和对象

一、实验目的和要求

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

a4c26d1e5885305701be709a3d33442f.png

五、调试过程

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());

}

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值