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<count;i++)
System.out.print(elem[i]+“ “);
System.out.println();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(“请输入栈的大小“);
Scanner sc = new Scanner(System.in);
int size = sc.nextInt();
Stack s = new Stack(size);
int op;
while(true){
System.out.println(“请选择要进行的操作:1 进栈;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(“输入有误,请重新输入。“);
}
}
}
}