实验3类与对象.docx
- 文档编号:1994465
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:15
- 大小:144.63KB
实验3类与对象.docx
《实验3类与对象.docx》由会员分享,可在线阅读,更多相关《实验3类与对象.docx(15页珍藏版)》请在冰点文库上搜索。
实验3类与对象
南昌大学实验报告
---(3)类与对象
学生姓名:
王维学号:
**********专业班级:
网工121班
实验类型:
■验证□综合□设计□创新实验日期:
实验成绩:
一、实验目的
本实验的目的用于指导读者掌握Java语言面向对象的程序设计方法,理解对象的封装等概念,要求读者在调试实例程序后,总结出面向对象的事务定义以及以对象的形式进行封装等内容。
二、实验内容
1、课本P221,8-6和课本P237,8.1题
2、编写一个名为“复数”的类,包含复数的实部和虚部(数据成员),以及复数之间的基本算术运算:
加、减(方法成员),并要求复数加减运算,程序运行中能对给定的复数进行运算,并打印运算的结果。
3、用类来描述游戏角色的交手次数、经验值、生命值之间的关系,并断定角色决斗的胜负。
三、实验要求
1、加减运算能够接收不同类型的参数既可以实现复数与实数的加减、复数与复数的加减运算。
2、两游戏角色决斗。
角色1交手次数+1,生命值-1,经验值+2;角色2交手次数+1,生命值-2,经验值+3。
经验值每增加50时,生命值+1;生命值<0判为负。
生命值初始为1000,经验值初始为0。
3、给定二个不同的角色,判定交手的胜负关系。
4、实验报告给出决斗结果和交手次数
5、实验报告给出所有源代码。
四、实验环境
1、PC微机;
2、DOS操作系统或Windows操作系统;
3、Eclipse程序集成环境。
五、实验步骤
内容一:
1、创建“复数”类Complex,定义实部、虚部成员
2、定义构造函数接收二个double参数用来初始化数据成员
3、定义二个复数运算函数plus()以及minus()各接收一个复数类型以实现复数与复数的加减运算。
4、定义二个复数运算函数plus()以及minus()各接收一个double类型以实现复数与与实数的加减运算。
4、定义一个打印方法。
5、在main()方法中创建复数对象并调用相关方法来验证。
内容二:
1、建立角色类Role,给出相应的成员,并能以生命值、经验值初始化角色对象。
2、在角色类中建立fight方法,接收一个角色类型的参数并与之“战斗”,返回胜者信息。
3、在主函数中初始化二个角色,调用fight方法。
六、测试数据
略
七、实验报告(学生完成)
实验报告应包括以下几个部分:
1、程序流程图;
鉴于复数类Complex没有复杂的流程,所以没有画流程图。
角色类的流程图,我分了三个部分:
2、程序的数据结构设计;
复数类Complex包含:
成员:
double类型的real和imaginary,分别代表实部和虚部
方法:
publicComplexplus(Complexa);
publicComplexminus(Complexa);
publicComplexplus(doublea);
publicComplexminus(doublea);
分别进行复数与复数或实数的加减法运算
publicStringprint()//打印复数类的信息
角色类Role包含:
成员:
privateintlife;//生命值
privateintexp;//经验值
privateintlifeSub;//每次战斗生命值减少的量
privateintexpAdd;//每次战斗经验值增加的量
publicstaticintnum;//交手的次数
privateintexpBase;//经验值增加50的基准
方法:
私有成员exp和life的set和get方法。
publicbooleanfight(Roleother)//参数为Role的fight方法。
publicvoidfight()//不带参数的fight方法。
3、程序的源代码及相关注释
复数类源码:
packageshiyan3;
publicclassComplex{
privatedoublereal;
privatedoubleimaginary;
publicComplexplus(Complexa){
doublex=this.real+a.getReal();
doubley=this.imaginary+a.getImaginary();
Complextmp=newComplex(x,y);
returntmp;
}
publicComplexminus(Complexa){
doublex=this.real-a.getReal();
doubley=this.imaginary-a.getImaginary();
Complextmp=newComplex(x,y);
returntmp;
}
publicComplexplus(doublea){
doublex=this.real+a;
doubley=this.imaginary;
Complextmp=newComplex(x,y);
returntmp;
}
publicComplexminus(doublea){
doublex=this.real-a;
doubley=this.imaginary;
Complextmp=newComplex(x,y);
returntmp;
}
publicStringprint(){
if(this.imaginary>0)
returnthis.real+"+"+this.imaginary+"i";
elseif(this.imaginary<0)
returnthis.real+""+this.imaginary+"i";
else
returnthis.real+"";
}
publicdoublegetReal(){
returnreal;
}
publicvoidsetReal(doublereal){
this.real=real;
}
publicdoublegetImaginary(){
returnimaginary;
}
publicvoidsetImaginary(doubleimaginary){
this.imaginary=imaginary;
}
publicComplex(){
};//无参数的构造方法。
publicComplex(doublereal,doubleimaginary){
this.real=real;
this.imaginary=imaginary;
}
publicstaticvoidmain(String[]args){
Complexa=newComplex(1,2);
Complexb=newComplex(4,5);
Complexc=newComplex(2,3);
System.out.println(a.print()+"和"+b.print()+"相加等于"+a.plus(b).print());
System.out.println(a.print()+"和"+c.print()+"相减等于"+a.minus(c).print());
System.out.println(a.print()+"和"+12+"相加等于"+a.plus(12).print());
System.out.println(a.print()+"和"+10+"相减等于"+a.minus(10).print());
}
}
角色类Role源码:
packageshiyan3;
publicclassRole{
//生命值
privateintlife;
//经验值
privateintexp;
//交手的次数
privateintlifeSub;
privateintexpAdd;
publicstaticintnum;
//经验值增加50的基准
privateintexpBase;
publicintgetLife(){
returnlife;
}
publicvoidsetLife(intlife){
this.life=life;
}
publicintgetExp(){
returnexp;
}
publicvoidsetExp(intexp){
this.exp=exp;
}
publicvoidfight(){
life-=lifeSub;
exp+=expAdd;
if((exp-expBase)>=50){
life++;
expBase+=50;
}
}
publicbooleanfight(Roleother){
num++;
this.fight();
other.fight();
System.out.println("第"+num+"次战斗开始");
if(life<=0&&other.getLife()<=0){
System.out.println("战斗结束,两人打平");
returntrue;
}elseif(life<=0){
System.out.println("战斗结束,角色2获胜");
returntrue;
}elseif(other.getLife()<=0){
System.out.println("战斗结束,角色1获胜");
returntrue;
}else{
System.out.println("角色1的生命值为"+life+",角色2的生命值为"
+other.getLife());
System.out.println("角色1的经验值为"+exp+",角色2的经验值为"
+other.getExp());
returnfalse;
}
}
publicRole(intlife,intexp,intlifeSub,intexpAdd){
super();
this.life=life;
this.exp=exp;
this.expBase=exp;
this.lifeSub=lifeSub;
this.expAdd=expAdd;
}
publicstaticvoidmain(String[]args){
Rolea=newRole(1000,0,1,2);
Roleb=newRole(1000,0,2,3);
//死循环,两人战斗,直到分出胜负为止
while(!
a.fight(b)){
}
}
}
4、程序运行结果的分析。
复数类的运行结果:
角色类程序的部分运行结果:
八、思考题(学生完成)
1.定义一个点类“Point”。
Point类的属性有x轴和y轴坐标,可以通过方法setX()设置x轴坐标,方法setY()设置y轴坐标,方法getX()获得x轴坐标,方法getY()获得y轴坐标。
编写一个测试类PointTest来创建Point类的对象,测试该类。
2.编程定义一个栈类,它封装了栈数组,判断栈空方法、判断栈满方法以及进栈和出栈。
Point类:
packageshiyan3;
classPoint{
privatedoublex;
privatedoubley;
publicdoublegetX(){
returnx;
}
publicvoidsetX(doublex){
this.x=x;
}
publicdoublegetY(){
returny;
}
publicvoidsetY(doubley){
this.y=y;
}
}
publicclassPointTest{
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
Pointa=newPoint();
a.setX(10);
a.setY(20);
System.out.println("该点的坐标为("+a.getX()+","+a.getY()+")");
a.setX(30.5);
a.setY(55.3);
System.out.println("该点的坐标为("+a.getX()+","+a.getY()+")");
}
}
Stack类:
packageshiyan3;
importjava.util.Scanner;
publicclassStack{
intstacksize=10;
privateint[]elem;
publicStack(intstacksize){
elem=newint[stacksize];
this.stacksize=stacksize;
}
//当前栈中元素的个数
privateintcount;
publicbooleanisEmpty(){
returncount==0?
true:
false;
}
publicbooleanisFull(){
returncount==stacksize?
true:
false;
}
publicvoidpush(intvar){
if(this.isFull()){
System.out.println("栈已满,不能进栈");
return;
}
elem[count++]=var;
}
publicvoidpop(){
if(this.isEmpty()){
System.out.println("栈已空,不能进栈");
return;
}
--count;
return;
}
publicvoidprint(){
System.out.println("当前栈中的元素为:
");
for(inti=0;i System.out.print(elem[i]+""); System.out.println(); } publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub System.out.println("请输入栈的大小"); Scannersc=newScanner(System.in); intsize=sc.nextInt(); Stacks=newStack(size); intop; while(true){ System.out.println("请选择要进行的操作: 1进栈;2出栈"); op=sc.nextInt(); if(op==1){ System.out.print("请输入要进栈的数: "); intvar=sc.nextInt(); s.push(var); s.print(); } elseif(op==2){ s.pop(); s.print(); } else{ System.out.println("输入有误,请重新输入。 "); } } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验3 类与对象 实验 对象