文档库 最新最全的文档下载
当前位置:文档库 › java实验五 多态性

java实验五 多态性

java实验五  多态性
java实验五  多态性

实验五多态性

一.实验目的和要求

目的:

1、掌握方法重载和类的多态性。

要求:

1、加减运算能够接收不同类型的参数既可以实现复数与实数的加减、复数与复数

的加减运算。

2、两游戏角色决斗。角色1交手次数+1,生命值-1,经验值+2;角色2交手次

数+1,生命值-2,经验值+3。经验值每增加50时,生命值+1;生命值<0判为负。

生命值初始为1000,经验值初始为0。

3、给定二个不同的角色,判定交手的胜负关系。

4、实验报告给出决斗结果和交手次数

5、实验报告给出所有源代码。

二.实验内容

1、编写一个名为“复数”的类,包含复数的实部和虚部(数据成员),以及复数之间的

基本算术运算:加、减(方法成员),并要求复数加减运算,程序运行中能对给定的复数进行运算,并打印运算的结果。

2、用类来描述游戏角色的交手次数、经验值、生命值之间的关系,并断定角色决斗的

胜负。

三.实验环境

硬件:

(1)学生用微机

(2)多媒体实验教室

软件:

(1)Windows XP中文操作系统

(2)JDK控制台

四.算法描述及实验步骤

实验步骤:

内容一:

1、创建“复数”类Complex,定义实部、虚部成员

2、定义构造函数接收二个double参数用来初始化数据成员

3、定义二个复数运算函数plus()以及minus()各接收一个复数类型以实现复数与复数

的加减运算。

4、定义二个复数运算函数plus()以及minus()各接收一个double类型以实现复数与与

实数的加减运算。

4、定义一个打印方法。

5、在main()方法中创建复数对象并调用相关方法来验证。

内容二:

1、建立角色类Role,给出相应的成员,并能以生命值、经验值初始化角色对象。

2、在角色类中建立fight方法,接收一个角色类型的参数并与之“战斗”,返回胜者信

息。

3、在主函数中初始化二个角色,调用fight方法。

五.调试过程

1.根据要求写出程序并调试运行,得:

当出现负数时,不需要我们外加一个负号,同时为什么会多出那么长的一串零呢?搞不懂为什么。于是我将程序改为当出现负数时,不外加一个负号。修改后的程序见附录1,结果见实验结果1。

2.根据实验步骤,写出程序并调试运行:

500次,不对啊,角色2经验上升时生命会增加啊,怎么会只有500次呢。仔细检查,修改程序得实验结果(见实验结果2,程序见附录2)。

六.实验结果

1.程序一运行结果:

2.程序二运行结果:

七.总结

这次的程序好长,不过都是自己写的,发了两节课,出现了不少问题(只是没好意思截出来),和同学老师讨论了一下,对普通函数和构造函数有了更深刻的认识,这次的程序也不如之前的完美,很多本来想做的东西,如用Scanner类从键盘键入自己想要的数字、如何读取自己输入的复数、只进行自己想要进行的运算、对运算结果进行说明等,最终由于时间的原因,也由于自己自身能力的限制,没能如自己所愿,是一大憾事。不过也不能太灰心,至少可能写一些简单的程序,其实我很得意的是我用了一个三元运算符(?:),呵呵,也不

能算没有收获。

附录:

1.程序一:

public class fsys//复数运算主类

{ static void print( complex c)//打印复数函数

{ System.out.print((c.em==0)?(c.re+"\n"):(c.re+((c.em>0)?("+"):(""))+c.em+"i\n" ));

}

public static void main(String ar[])

{ complex a=new complex();

complex b=new complex();

complex c=new complex();

double d=4.30;//要进行运算的实数

a.re=1.02;//加数(被减数)的实部

a.em=2.34;// 加数(被减数)的虚部

b.re=3.105;// 被加复数(减数)的实部

b.em=5.4317;// 被加复数(减数)的虚部

c=a.plus(b);

print(c);

c=a.minus(b);

print(c);

c=a.plus(d);

print(c);

c=a.minus(d);

print(c);

}

}

class complex

{ double re;//复数实部

double em; //复数部

complex plus(complex other)//复数相加

{ complex result=new complex();

result.re=this.re+other.re;

result.em=this.em+other.em;

return result;

}

complex minus(complex other)//复数相减

{ complex result=new complex();

result.re=this.re-other.re;

result.em=this.em-other.em;

return result;

}

complex plus(double other)//复数加实数

{ complex result=new complex();

result.re=this.re+other;

result.em=this.em;

return result;

}

complex minus(double other)//复数减实数

{ complex result=new complex();

result.re=this.re-other;

result.em=this.em;

return result;

}

}

2.程序二:

class role

{ String name;//角色姓名

int life=1000;//角色生命初值为1000

int exp=0;//角色经验初值为0

int count=0;//角色交战场次初值0

role fight(role role2)//定义生死搏斗函数

{ int n,E1,E2,i=0,j=0;

while(this.life>0&&role2.life>0)

{ this.life=this.life-1;

role2.life=role2.life-2;

this.exp=this.exp+2;

role2.exp=role2.exp+3;

E1=this.exp;

E2=role2.exp;

this.count++;

role2.count++;

if(E1-50*i>=50)

{ this.life=this.life+1;

i++;

}

if(E2-50*j>=50)

{ role2.life=role2.life+1;

j++;

}

}

return ((this.life<0)?role2:this);//生命值<0判为负 }

}

public class game

{ public static void main(String ar[])

{ role role1=new role();

role role2=new role();

https://www.wendangku.net/doc/3f14701337.html,="role1";

https://www.wendangku.net/doc/3f14701337.html,="role2";

role winner=new role();

winner=role1.fight(role2);

System.out.print(https://www.wendangku.net/doc/3f14701337.html,+"经过"+winner.count+"次的努力,终于赢得了胜利!");

}

}

相关文档