实验4面向对象基础.docx
- 文档编号:8266922
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:22
- 大小:41.13KB
实验4面向对象基础.docx
《实验4面向对象基础.docx》由会员分享,可在线阅读,更多相关《实验4面向对象基础.docx(22页珍藏版)》请在冰豆网上搜索。
实验4面向对象基础
####x大学计算机与信息技术学院
实验报告
姓名
学号
专业班级
课程名称
Java实验
实验日期
成绩
指导教师
批改日期
实验名称
实验4面向对象基础
一.实验目的:
(1)掌握类的定义、类的实例化方法;
(2)掌握类中的静态变量和静态方法的使用;
(3)掌握使用类的构造方法对对象的数据域进行初始化;
(4)掌握getter和setter的使用;
二.实验容
(1)现在要求设计一个表示学生的类,里面有学生的、学号、年龄,还要有三项成绩:
计算机成绩、数学成绩、英语成绩,要求可以求总分、平均分、最高、最低分,并且可以输出一个学生的完整信息,请设计此类。
提示:
程序开发步骤
根据需求定义出所要的类;
根据题目中的要求规划出类的属性;
所有的属性必须封装:
private;
所有的属性必须通过getter和setter访问;
如果需要增加构造方法,为属性赋初值,适当采用构造方法重载;
所有的信息不要类中直接输出,而是交给调用处输出,即在该类中尽量不出现System.out.println()语句。
例如在调用类中输出如下结果:
总分:
267.005
平均分:
89.335
最高分:
91.4
最低分:
87.3
学生信息:
|-学号:
100
|-:
John
|-年龄:
20
|-英语:
89.0
|-计算机:
87.3
|-数学:
91.4
程序代码:
packaget4;
importjava.util.*;
importorg.omg.CORBA.portable.ValueOutputStream;
publicclassLX4_1{
publicstaticvoidmain(String[]args){
Studentstudent1=newStudent();
Scannerinput=newScanner(System.in);
System.out.println("请输入学生:
");
student1.setName(input.next());
System.out.println("请输入学号:
");
student1.setStudentNumber(input.nextInt());
System.out.println("请输入年龄:
");
student1.setAge(input.nextInt());
System.out.println("请输入英语成绩:
");
student1.setEnglishGrade(input.nextDouble());
System.out.println("请输入电脑成绩:
");
student1.setComputerGrade(input.nextDouble());
System.out.println("请输入数学成绩:
");
student1.setMathGrade(input.nextDouble());
printInformations(student1);
}
publicstaticvoidprintInformations(Students1){
System.out.printf("总分:
%3.2f\n",Double.parseDouble(String.valueOf(s1.sumGrade())));
System.out.printf("平均分:
%3.2f\n",Double.parseDouble(String.valueOf(s1.avgGrade())));
System.out.println("最高分:
"+Double.parseDouble(String.valueOf(s1.maxGrade())));
System.out.println("最低分:
"+Double.parseDouble(String.valueOf(s1.minGrade())));
System.out.println("学生信息:
");
System.out.println("学号:
"+s1.getStudentNumber());
System.out.println(""+s1.getName());
System.out.println("年龄"+s1.getAge());
System.out.println("英语成绩:
"+s1.getEnglishGrade());
System.out.println("电脑成绩:
"+s1.getComputerGrade());
System.out.println("数学成绩:
"+s1.getMathGrade());
}
}
classStudent{
privateintstudentNumber;
privateStringname;
privateintage;
privatedoubleenglishGrade;
privatedoublecomputerGrade;
privatedoublemathGrade;
voidsetStudentNumber(intnumber){
studentNumber=number;
}
intgetStudentNumber(){
returnstudentNumber;
}
voidsetName(Stringnm){
name=nm;
}
StringgetName(){
returnname;
}
voidsetAge(intage1){
age=age1;
}
intgetAge(){
returnage;
}
voidsetEnglishGrade(doublegrade){
englishGrade=grade;
}
doublegetEnglishGrade(){
returnenglishGrade;
}
voidsetComputerGrade(doublegrade){
computerGrade=grade;
}
doublegetComputerGrade(){
returncomputerGrade;
}
voidsetMathGrade(doublegrade){
mathGrade=grade;
}
doublegetMathGrade(){
returnmathGrade;
}
doublemaxGrade(){
doublemax;
max=englishGrade;
if(max max=computerGrade; if(max max=mathGrade; returnmax; } doubleminGrade(){ doublemin; min=englishGrade; if(min>computerGrade) min=computerGrade; if(min>mathGrade) min=mathGrade; returnmin; } doublesumGrade(){ doublesum; sum=englishGrade+computerGrade+mathGrade; returnsum; } doubleavgGrade(){ doubleave; ave=(sumGrade())/3; returnave; } } 运行结果贴图: (二) 1、设计类来描述真实客观世界中的事物,使用类的成员变量来表示事物的属性和状态,使用类的成员方法来提供对成员变量的访问或修改 程序功能: 设计一个用来描述汽车的类,使用类的非静态成员变量来表示汽车的车主、当前的速率和当前方向盘的转向角度,使用类的非静态成员方法来表示改变汽车的速率和停车两个操作。 程序源代码如下,补全横线上的程序代码。 packaget4; publicclassCar{ privateStringownerName;//车主 privatefloatcurSpeed;//当前车速 privatefloatcurDirInDegree;//当前方向盘转向角度 publicCar(StringownerName){ this.ownerName=ownerName; } publicCar(StringownerName,floatspeed,floatdirInDegree){ this(ownerName);//调用上面那个构造函数为ownerName赋值 curSpeed=speed; curDirInDegree=dirInDegree; } publicStringgetOwnerName(){//提供对车主的访问 returnownerName; } publicfloatgetCurDirInDegree(){//提供对当前方向盘转向角度的访问 returncurDirInDegree; } publicfloatgetCurSpeed(){//提供对当前车速的访问 returncurSpeed; } publicvoidchangeSpeed(floatcurSpeed){//提供改变当前的车速 this.curSpeed=curSpeed; } publicvoidstop(){//提供停车 curSpeed=0; } } 主方法: packaget4; importjava.util.*; publicclassLX4_2{ publicstaticvoidmain(String[]args){ Scannerinput=newScanner(System.in); System.out.println("请输入车主、车速和方向盘角度: "); Carcar1=newCar(input.next(),input.nextFloat(),input.nextFloat()); //TODO自动生成的方法存根 System.out.println("车主: "+car1.getOwnerName()); System.out.println("当前车速: "+car1.getCurSpeed()); System.out.println("当前方向盘角度: "+car1.getCurDirInDegree()); System.out.println("修改车速: "); System.out.println("请输入新的车速: "); car1.changeSpeed(input.nextFloat()); System.out.println("当前车速: "+car1.getCurSpeed()); System.out.println("停车: "); car1.stop(); System.out.println("当前车速: "+car1.getCurSpeed()); } } 编写一个主方法,编译并测试源程序。 2、创建类的对象,使用对象的方法(类的非静态方法)来访问或修改对象的变量(类的非静态变量) 创建类Car的对象,在调用类的构造函数时指定对象的变量的初始值,以后再使用对象的方法来访问或修改对象的变量的值。 程序代码如下(需要添加代码,要求运行结果如以下图所示。 packaget4; publicclassLX4_3{ publicstaticvoidmain(String[]args){ Carcar=newCar("成龙",200f,25f); System.out.println("车主: "+car.getOwnerName()); System.out.println("当前车速: "+car.getCurSpeed()); System.out.println("当前方向盘角度: "+car.getCurDirInDegree()); System.out.printf("在调用changeSpeed(80)后,车速变为: "); car.changeSpeed(80); System.out.println(car.getCurSpeed()); System.out.printf("在调用stop()后,车速变为: "); car.stop(); System.out.println(car.getCurSpeed()); } } 编译并运行,结果如下图。 (三)(账户类Account)设计一个名为Account的类,它包括: ●一个名为id的int类型私有账户数据域(默认值为0)。 ●一个名为balance的double类型私有账户数据域(默认值为0)。 ●一个名为annualInterestRate的double类型私有数据域存储当前利率(默认值为0)。 假设所有的账户都有相同的利率。 ●一个名为dateCreated的Date类型私有数据域存储账户的开户日期。 ●一个能创建默认账户的无参构造方法。 ●一个能创建带特定id和初始余额的账户的构造方法。 ●id、balance和annualInterestRate的访问器和修改器。 ●dateCreated的访问器。 ●一个名为getMonthlyInterestRate()的方法返回月利率。 ●一个名为withDraw的方法从账户提取特定数额。 ●一个名为deposit的方法向账户存储特定数额。 实现这个类。 编写一个测试程序,创建一个账户ID为1122、余额为20000美元、年利率为4.5%的Account对象。 使用withdraw方法取款2500美元,使用deposit方法存款3000美元,然后打印余额、月利率以与这个账户的开户日期。 程序代码: packaget4; importjava.util.*; publicclassLX4_4{ publicstaticvoidmain(String[]args){ Accountaccount=newAccount(1122,20000); account.setAnnualInterestRate(4.5); account.withDraw(2500); account.desposit(3000); print(account); } publicstaticvoidprint(Accountac1){ System.out.println("余额为: "+ac1.getBalance()); System.out.println("月利率: "+ac1.getAnnualInterestRate()/12*100 +"%"); System.out.println("开户日期: "+ac1.getDateCreat()); } } packaget4; importjava.util.*; publicclassAccount{ privateintid; privatedoublebalance; privatestaticdoubleannualInterestRate; privateDatedateCreated; Account(){ id=id+1; this.balance=0; dateCreated=newDate(); } Account(intid,doublebalance){ this.id=id; this.balance=balance; dateCreated=newDate(); } publicintgetId(){ returnid; } publicvoidsetId(intid){ this.id=id; } publicdoublegetBalance(){ returnbalance; } publicvoidsetBalance(doublebalance){ this.balance=balance; } publicdoublegetAnnualInterestRate(){ returnannualInterestRate; } publicvoidsetAnnualInterestRate(doublean){ annualInterestRate=an/100; } publicDategetDateCreat(){ returndateCreated; } publicdoublegetMonthlyInterestRate(){ returnannualInterestRate/12; } publicvoidwithDraw(doubledraw){ doublea=this.getBalance()-draw; this.setBalance(a); } publicvoiddesposit(doubledep){ doublea=this.getBalance()+dep; this.setBalance(a); } } 运行结果贴图: (三)(风扇类Fan)设计一个名为Fan的类来表示一个风扇。 这个类包括: ●三个名为SLOW、MEDIUM、FAST而值是1、2和3的常量表示风扇的速度。 ●一个名为speed的int类型私有数据域表示风扇的速度(默认值为SLOW)。 ●一个名为on的boolean类型的私有数据域表示风扇是否打开(默认值为false)。 ●一个名为radius的double类型的私有数据域表示风扇的半径(默认值为5)。 ●一个名为color的String类型的数据域表示风扇的颜色(默认值为blue)。 ●这四个数据域的访问器和修改器。 ●一个创建默认风扇的无参构造方法。 ●一个名为toString()的方法返回描述风扇的字符串。 如果风扇是打开的,那么该方法在一个组合的字符串中返回风扇的速度、颜色和半径。 如果风扇没有打开,该方法就返回一个由“fanisoff”和风扇颜色与半径组合成的字符串。 实现这个类。 编写一个测试程序,创建两个fan对象。 将第一个对象设置为最大速度、半径为10、颜色为yellow、状态为打开。 将第二个对象设置为中等速度、半径为5、颜色为blue、状态为关闭。 通过调用它们的toString方法显示这些对象。 程序代码: packaget4; publicclassLX4_5{ publicstaticvoidmain(String[]args){ Fanfan1=newFan(); fan1.setSpeed(3); fan1.setRadius(10); fan1.setColor("yellow"); fan1.setOn(true); Fanfan2=newFan(); fan2.setSpeed (2); fan2.setRadius(5); fan2.setColor("blue"); fan2.setOn(false); System.out.println(fan1.toString()); System.out.println(fan2.toString()); } } packaget4; publicclassFan{ finalstaticintslow=1; finalstaticintmedium=2; finalstaticintfast=3; privateintspeed=slow; privatebooleanon=false; privatedoubleradius=5; privateStringcolor="blue"; publicintgetSpeed(){ returnspeed; } publicvoidsetSpeed(intsp){ speed=sp; } publicbooleangetOn(){ returnon; } publicvoidsetOn(booleanon1){ on=on1; } publicdoublegetRadius(){ returnradius; } publicvoidsetRadius(doubler){ radius=r; } publicStringgetColor(){ returncolor; } publicvoidsetColor(Stringa){ color=a; } Fan(){ } publicStringtoString(){ if(this.getOn()==true){ return"风扇转速: "+this.getSpeed()+"风扇颜色: "+this.getColor() +"半径: "+this.getRadius(); }else return"fanisoff"+"风扇颜色: "+this.getColor()+"半径: " +this.getRadius(); } } 运行结果贴图: (四)(几何方面: 正n边形)在一个正n边形中,所有边的长度都相同,且所有角的度数都相同(即这个多边形是等边等角的)。 设计一个名为RegularPolygon的类,该类包括: ●一个名为n的int型私有数据域定义多边形的边数,默认值为3。 ●一个名为side的double型私有数据域存储边的长度,默认值为1。 ●一个名为x的double型私有数据域,它定义多边形中点的x坐标,默认值为0。 ●一个名为y的double型私有数据域,它定义多边形中点的y坐标,默认值为0。 ●一个创建带默认值的正多边形的无参构造方法。 ●一个能创建带指定边数和边长度、中心在(0,0)的正多边形的构造方法。 ●一个能创建带指定边数和边长度、中心在(x,y)的正多边形的构造方法。 ●所有数据域的访问器和修改器。 ●一个返回多边形周长的方法getPerimeter()。 ●一个返回多边形面积的方法getArea()。 计算正多边形面积的公式是: 面积= 实现这个类。 编写一个测试程序,分别使用无参构造方法、RegularPolygon(6,4)和RegularPolygon(10,4,5.6,7.8)创建三个RegularPolygon对象。 显示每个对象的周长和面积。 程序代码:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 面向 对象 基础