实验四类与对象1.实验目的1、使用类来封装对象的属性和行为;2、掌握对象的组合以及参数传递;3、掌握类变量与实例变量,以及类方法与实例方法的区别2.实验内容1、参考教科书,完成下面实验:1)实验1 Tank类2)实验2 计算机与光盘3)实验3 家族的姓氏4)实验4 三角形、梯形和圆形的类封装5)实验5 实例成员与类成员2、完成习题:1)根据要求修改实验1,改进speedUP方法,使得Tank类的对象加速时不能将speed值超过220;增加一个刹车方法:void brake(),Tank类的对象调用它能将speed的值变成0。
2)根据要求修改实验2,主类中再增加一个CD的对象,然后将计算机中的数据(data数组)复制到CD对象中。
3、提高题编写储蓄账户类及测试类,模拟存款,参考以下运行方式:(1)新开5个储蓄账户,各储蓄账户的编号、户名在新开储蓄账户时初始化,假设每位用户新开储蓄账户时都存入了一笔钱。
(2)提示用户从键盘输入储蓄账户编号。
(3)若输入的储蓄账户编号与新开的5个储蓄账户编号之一匹配,则提示用户从键盘输入存款金额,存款金额必须大于0,否则显示错误提示,直到用户输入的存款金额大于0为止。
(4)相应储蓄账户的余额被更新。
(5)存款完成后,提示存款成功,显示该储蓄账户的编号、户名、余额。
(6)若输入的储蓄账户编号与新开的5个储蓄账户编号均无法匹配,显示错误提示,并询问是否还要继续存款。
(7)用户输入yes,继续执行步骤(2),否则显示退出信息。
最基本要求:绘制UML类图;储蓄账户的余额必须确保大于等于0。
3.实验步骤参考教材中相关的实验。
4.评分标准1.A——内容功能完善,编程风格好,人机接口界面好;2.B——内容功能完善,编程风格良好,人机接口界面良好;3.C——完成必做内容;4.D——能完成必做内容;5.E——未按时完成必做内容,或者抄袭(雷同者全部为E).参照书上实验按模版要求,将【代码】替换为Java程序代码,编写好完整的程序文档,最后运行得到的相关文件,把实验所得文件一起打包上交。
(压缩包的文件名为:学号后三位和名字开头字母,如109zhh.RAR|ZIP)实验1 Tank类模板代码Tank.javapublic class Tank {//【代码1】//声明double型变量speed,刻画速度//【代码2】//声明int型变量bulletAmount,刻画炮弹数量void speedUp(int s){//【代码3】//s+speed赋值给speed}void speedDown(int d){if(speed-d>=0)//【代码4】//d-speed赋值给speedelsespeed=0;}int getBulletAmount() {return bulletAmount;}void setBulletAmount(int m) {bulletAmount = m;}double getSpeed() {return speed;}void fire(){if(bulletAmount>=1){//【代码5】//将bulletAmount-1赋值给bulletAmountSystem.out.println("打出一发炮弹");}else{System.out.println("没有炮弹了,无法开火");}}}Fight.javapublic class Fight {public static void main(String[] args) {Tank tank1,tank2;tank1=new Tank();tank2=new Tank();tank1.setBulletAmount(10);tank2.setBulletAmount(10);System.out.println("tank1的炮弹数量:"+tank1.getBulletAmount());System.out.println("tank2的炮弹数量:"+tank2.getBulletAmount());tank1.speedUp(80);tank2.speedUp(90);System.out.println("tank1目前的速度:"+tank1.getSpeed());System.out.println("tank2目前的速度:"+tank2.getSpeed());tank1.speedDown(15);tank2.speedDown(30);System.out.println("tank1目前的速度:"+tank1.getSpeed());System.out.println("tank2目前的速度:"+tank2.getSpeed());System.out.println("tank1开火:");tank1.fire();System.out.println("tank2开火:");tank2.fire();System.out.println("tank1的炮弹数量:"+tank1.getBulletAmount());System.out.println("tank2的炮弹数量:"+tank2.getBulletAmount());}}实验2 计算机与光盘模板代码CD.javapublic class CD {int size;int content[];public void setSize(int size){this.size=size;content=new int[size];}public int getSize(){return size;}public int[] getContent() {return content;}public void setContent(int[] b) {int min=Math.min(content.length,b.length);for(int i=0;i<min;i++)content[i]=b[i];}}Computer.javapublic class Computer {int data[];CD includCD;public void putCD(CD cd){includCD=cd;int size=includCD.getSize();data=new int[size];}void copyToComputer(){int []b=includCD.getContent();int min=Math.min(data.length,b.length);for(int i=0;i<data.length;i++){data[i]=b[i];}}public void addData(int m){for(int i=0;i<data.length;i++){data[i]=data[i]+m;}}void copyToCD(){includCD.setContent(data);}void showData(){for(int i=0;i<data.length;i++){System.out.printf("%3d",data[i]);}}}User.javapublic class User {public static void main(String[] args) {CD dataCD=new CD();int b[]={1,2,3,4,5,6,7,8};dataCD.setSize(b.length);dataCD.setContent(b);int a[]=dataCD.getContent();System.out.println("dataCD上的内容:");for(int i=0;i<a.length;i++){System.out.printf("%3d",a[i]);}Computer computerIMB=new Computer();【代码1】//computerIMB调用putCD(CD cd)方法,将dataCD的引用传递给cdSystem.out.println("\n将dataCD的数据复制到计算机:computerIMB.");【代码2】//computerIMB调用copyToComputer()方法System.out.println("computerIMB上的内容:");computerIMB.showData();int m=12;System.out.println("\ncomputerIMB将每个数据增加"+m);computerIMB.addData(m);System.out.println("computerIMB将增值后的数据复制到CD:dataCD");【代码3】//computerIMB调用copyToCD()方法System.out.println("dataCD上的内容:");a=dataCD.getContent();for(int i=0;i<a.length;i++){System.out.printf("%3d",a[i]);}}}实验3 家族的姓氏模板代码FamilyPerson.javapublic class FamilyPerson {static String surname;String name;public static void setSurname(String s) {surname = s;}public void setName(String s) { = s;}}MainClass.javapublic class MainClass {public static void main(String[] args) {【代码1】//用类名FamilyPerson访问surname,并为surname赋值:"李"FamilyPerson father,sonOne,sonTwo;father=new FamilyPerson();sonOne=new FamilyPerson();sonTwo=new FamilyPerson();【代码2】//father调用setName(String s),传递"向阳"sonOne.setName("抗日");sonTwo.setName("抗战");System.out.println("父亲:"+father.surname+);System.out.println("大儿子:"+sonOne.surname+);System.out.println("二儿子:"+sonTwo.surname+);【代码3】//father调用setName(String s),传递"张"System.out.println("父亲:"+father.surname+);System.out.println("大儿子:"+sonOne.surname+);System.out.println("二儿子:"+sonTwo.surname+);}}实验4 三角形、梯形和圆形的类封装模板代码AreaAndLength.javaclass Trangle{double sideA,sideB,sideC,area,length;boolean boo;public Trangle(double a,double b,double c){【代码1】//参数a,b,c分别赋值给sideA,sideB,sideCif(【代码2】) //a,b,c构成三角形的条件表达式{【代码3】//给boo赋值。