实验3-类与对象
XX大学实验报告---(3)类与对象 学生姓名:
学 号:
专业班级:
网工班 实验类型:■ 验证 □ 综合 □ 设计 □ 创新 实验日期:
实验成绩:
一、实验目的 本实验的目的用于指导读者掌握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,分别代表实部和虚部 方法:
public Complex plus(Complex a);public Complex minus(Complex a);public Complex plus(double a);public Complex minus(double a);分别进行复数与复数或实数的加减法运算 public String print()//打印复数类的信息 角色类Role包含:
成员:
private int life;// 生命值 private int exp;// 经验值 private int lifeSub;//每次战斗生命值减少的量 private int expAdd;//每次战斗经验值增加的量 public static int num;// 交手的次数 private int expBase;// 经验值增加50的基准 方法:
私有成员exp和life的set和get方法。
public boolean fight(Role other)//参数为Role的fight方法。
public void fight()//不带参数的fight方法。
3、程序的源代码及相关注释 复数类源码:
package shiyan3;public class Complex { private double real;private double imaginary;public Complex plus(Complex a){ double x = this.real + a.getReal();double y = this.imaginary + a.getImaginary();Complex tmp = new Complex(x, y);return tmp;} public Complex minus(Complex a){ double x = this.real-a.getReal();double y = this.imaginary-a.getImaginary();Complex tmp = new Complex(x, y);return tmp;} public Complex plus(double a){ double x = this.real + a;double y = this.imaginary;Complex tmp = new Complex(x, y);return tmp;} public Complex minus(double a){ double x = this.real-a;double y = this.imaginary;Complex tmp = new Complex(x, y);return tmp;} public String print(){ if(this.imaginary > 0)return this.real + “+“ + this.imaginary + “i“;else if(this.imaginary < 0)return this.real + ““ + this.imaginary + “i“;else return this.real + ““;} public double getReal(){ return real;} public void setReal(double real){ this.real = real;} public double getImaginary(){ return imaginary;} public void setImaginary(double imaginary){ this.imaginary = imaginary;} public Complex(){ };//无参数的构造方法。
public Complex(double real, double imaginary){ this.real = real;this.imaginary = imaginary;} public static void main(String[] args){ Complex a = new Complex(1, 2);Complex b = new Complex(4, 5);Complex c = new Complex(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源码:
package shiyan3;public class Role { // 生命值 private int life;// 经验值 private int exp;// 交手的次数 private int lifeSub;private int expAdd;public static int num;// 经验值增加50的基准 private int expBase;public int getLife(){ return life;} public void setLife(int life){ this.life = life;} public int getExp(){ return exp;} public void setExp(int exp){ this.exp = exp;} public void fight(){ life-= lifeSub;exp += expAdd;if((exp-expBase)>= 50){ life++;expBase += 50;} } public boolean fight(Role other){ num++;this.fight();other.fight();System.out.println(“第“ + num + “次战斗开始“);if(life <= 0 && other.getLife()<= 0){ System.out.println(“战斗结束,两人打平“);return true;} else if(life <= 0){ System.out.println(“战斗结束,角色2获胜“);return true;} else if(other.getLife()<= 0){ System.out.println(“战斗结束,角色1获胜“);return true;} else { System.out.println(“ 角色1的生命值为“ + life + “,角色2的生命值为“ + other.getLife());System.out.println(“ 角色1的经验值为“ + exp + “,角色2的经验值为“ + other.getExp());return false;} } public Role(int life, int exp, int lifeSub, int expAdd){ super();this.life = life;this.exp = exp;this.expBase = exp;this.lifeSub = lifeSub;this.expAdd = expAdd;} public static void main(String[] args){ Role a = new Role(1000, 0, 1, 2);Role b = new Role(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类:
package shiyan3;class Point{ private double x;private double y;public double getX(){ return x;} public void setX(double x){ this.x = x;} public double getY(){ return y;} public void setY(double y){ this.y = y;} } public class PointTest { public static void main(String[] args){ // TODO Auto-generated method stub Point a = new Point();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类:
package shiyan3;import java.util.Scanner;public class Stack { int stacksize=10;private int[] elem;public Stack(int stacksize){ elem = new int[stacksize];this.stacksize = stacksize;} //当前栈中元素的个数 private int count;public boolean isEmpty(){ return count==0?true:false;} public boolean isFull(){ return count==stacksize?true:false;} public void push(int var){ if(this.isFull()){ System.out.println(“栈已满,不能进栈!!“);return;} elem[count++]=var;} public void pop(){ if(this.isEmpty()){ System.out.println(“栈已空,不能进栈!!“);return;}--count;return;} public void print(){ System.out.println(“当前栈中的元素为:“);for(int i=0;i 2 出栈 “);op=sc.nextInt();if(op==1){ System.out.print(“请输入要进栈的数:“);int var=sc.nextInt();s.push(var);s.print();} else if(op==2){ s.pop();s.print();} else{ System.out.println(“输入有误,请重新输入。“);} } } }
