JAVA实验报告二.docx
《JAVA实验报告二.docx》由会员分享,可在线阅读,更多相关《JAVA实验报告二.docx(14页珍藏版)》请在冰豆网上搜索。
JAVA实验报告二
HUBEIUNIVERSITYOFAUTOMOTIVETECHNOLOGY
JAVA语言程序设计
实验报告
齐心编著
翟亚红审核
计算机实验教学示范中心
2013年1月
实验二Java类编程练习
实验目的:
1.掌握类及类的声明
2.掌握对象的定义和使用
3.掌握接口的定义与实现
实验内容:
1.对象的创建和使用
编写一个圆环类Ring的Java程序。
圆环类有3个数据成员,分别是内半径innerRadius,外半径outerRadius和颜色color,这些属性通过get和set方法进行封装。
另外,圆环类中的getArea方法可以返回其面积。
把程序中的代码补充完整,并查看结果。
publicclassRing{
privatedoubleinnerRadius;
privatedoubleouterRadius;
publicStringcolor;
publicRing(doubleiRadius,doubleoRadius,Stringc){
//初始化数据成员
this.innerRadius=iRadius;
this.outerRadius=oRadius;
this.color=c;
}
//用get和set方法封装数据成员
publicdoublegetInnerRadius(){
returninnerRadius;
}
publicvoidsetInnerRadius(doubleinnerRadius){
this.innerRadius=innerRadius;
}
publicdoublegetOuterRadius(){
returnouterRadius;
}
publicvoidsetOuterRadius(doubleouterRadius){
this.outerRadius=outerRadius;
}
publicStringgetColor(){
returncolor;
}
publicvoidsetColor(Stringcolor){
this.color=color;
}
publicdoublegetArea(){
returnMath.PI
*(getOuterRadius()*getOuterRadius()-getInnerRadius()
*getInnerRadius());
}
publicdoublegeticricle(){//内周长
return2*Math.PI*getInnerRadius();
}
publicdoublegetocricle(){//内周长
return2*Math.PI*getOuterRadius();
}
publicstaticvoidmain(String[]args){
Ringring=newRing(5,8,"red");
doublering1,ring2;
System.out.println("圆环的内半径:
"+ring.getInnerRadius());
System.out.println("圆环的外半径:
"+ring.getOuterRadius());
System.out.println("圆环的颜色:
"+ring.color);
System.out.println("圆环的面积:
"+ring.getArea()+"\n");
ring.setInnerRadius(4);
ring.setOuterRadius(6);//设置圆环ring的外半径为6
ring.setColor("blue");
ring1=ring.geticricle();
ring2=ring.getocricle();
System.out.println("圆环的内半径:
"+ring.getInnerRadius());
System.out.println("圆环的外半径:
"+ring.getOuterRadius());
System.out.println("圆环的颜色:
"+ring.color);
System.out.printf("圆环的面积:
%.2f\n",ring.getArea());
System.out.printf("圆环的内周长:
%.2f\n",ring1);
System.out.printf("圆环的外周长:
%.2f\n",ring2);
}
}
运行结果:
圆环的内半径:
5.0
圆环的外半径:
8.0
圆环的颜色:
red
圆环的面积:
122.52211349000193
圆环的内半径:
4.0
圆环的外半径:
6.0
圆环的颜色:
blue
圆环的面积:
62.83
圆环的内周长:
25.13
圆环的外周长:
37.70
思考:
1)将程序中的语句Ringring=newRing(5,8,"red");改成Ringring=newRing();修改后编译运行,此时有错误发生吗?
分析错误的原因。
2)接着为程序添加一个如下所示的默认构造函数,观察程序运行是否还有上述错误发生?
publicRing(){
innerRadius=1.0;
outerRadius=2.0;
color="white";
}
答:
没有错误发生。
3)如果在输出圆环的面积时要求保留两位小数,程序如何修改?
答:
System.out.printf("圆环的面积:
%.2f\n",ring.getArea());
4)请为圆环类Ring在添两个方法以便能返回内圆和外圆的周长,然后在主函数main()中分别创建两个对象ring1,ring2以显示周长。
答:
System.out.printf("圆环的内周长:
%.2f\n",ring1);
System.out.printf("圆环的外周长:
%.2f\n",ring2);
2.使用类来封装对象的属性和功能编写一个Java程序,该程序中有3个类:
Trangle、Lader和Circle,分别用来刻画“三角形”、“梯形”和“圆形”。
具体要求如下:
Trangle类具有类型为double的三个边(sideA,sideB,sideC),以及周长(length)、面积(area)属性,Trangle类具有返回周长(getLength)、面积(getArea)以及修改三个边(setABC)的功能。
另外还有一个boolean型的属性(boo),该属性用来判断三个数是否构成一个三角形。
Lader类具有类型为double的上底(above)、下底(bottom)、高(height)、面积(area)属性,具有返回面积(getArea)的功能。
Circle类具有类型为double的半径(radius)、周长(length)和面积(area)属性,具有返回周长(getLength)、面积(getArea)的功能。
把程序中的代码补充完整,并查看结果。
//importjavax.swing.text.TabableView;
classTrangle
{
doublesideA,sideB,sideC,area,length;
booleanboo;
publicTrangle(doublea,doubleb,doublec)
{
setABC(a,b,c);//带参数的构造方法
}
doublegetLength(){
if(boo)
{
returnsideA+sideB+sideC;
}
else
{
System.out.println("不是一个三角形,不能计算周长");
return0;
}
}
publicdoublegetArea()
{
if(boo)
{
doublep=(sideA+sideB+sideC)/2.0;
area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC));
returnarea;
}
else
{
System.out.println("不是一个三角形,不能计算面积");
return0;
}
}
publicvoidsetABC(doublea,doubleb,doublec)
{
//参数a,b,c分别赋值给sideA,sideB,sideC
//【补充代码…】
sideA=a;
sideB=b;
sideC=c;
if(a+b>c&&a+c>b&&b+c>a)//a,b,c构成三角形的条件表达式
{
//给boo赋值。
【补充代码】
boo=true;
}
else
{
//给boo赋值。
【补充代码】
boo=false;
}
}
}
classLader
{
doubleabove,bottom,height,area;
Lader(doublea,doubleb,doubleh)
{
//带参数的构造方法,将参数a,b,h分别赋值给above,bottom,height【补充代码…】
this.above=a;
this.bottom=b;
this.height=h;
}
doublegetArea()
{
//方法体,,要求计算出area返回
//【补充代码…】
return0.5*(above+bottom)*height;
}
}
classCircle
{
doubleradius,area,length;
Circle(doubler)
{
//带参数的构造方法【补充代码
this.radius=r;
}
doublegetArea()
{
//方法体,要求计算出area返回【补充代码…】
returnMath.PI*radius*radius;
}
doublegetLength()
{
//getArea方法体的代码,要求计算出length返回【补充代码…】
return2*Math.PI*radius;
}
voidsetRadius(doublenewRadius)
{
radius=newRadius;
}
doublegetRadius()
{
returnradius;
}
}
publicclassAreaAndLength
{
publicstaticvoidmain(Stringargs[])
{
doublelength,area;
Circlecircle=null;
Trangletrangle=null;
Laderlader=null;
//创建对象circle(半径为5)【补充代码】
circle=newCircle(5);
//创建对象trangle(边长分别为3,4,5)【补充代码】
trangle=newTrangle(3,4,5);
//创建对象lader【补充代码】
lader=newLader(3,4,5);
//circle调用方法返回周长并赋值给length【补充代码】
length=circle.getLength();
System.out.println("圆的周长:
"+length);
//circle调用方法返回面积并赋值给area【补充代码】
area=circle.getArea();
System.out.println("圆的面积:
"+area);
//trangle调用方法返回周长并赋值给length【补充代码】
length=trangle.getLength();
System.out.println("三角形的周长:
"+length);
//trangle调用方法返回面积并赋值给area【补充代码】
area=trangle.getArea();
System.out.println("三角形的面积:
"+area);
//lader调用方法返回面积并赋值给area【补充代码】
area=lader.getArea();
System.out.println("梯形的面积:
"+area);
//trangle调用方法设置三个边,要求将三个边修改为12,34,1。
【补充代码】
trangle.setABC(12,34,1);
//trangle调用方法返回面积并赋值给area【补充代码】
area=trangle.getArea();
System.out.println("三角形的面积:
"+area);
//trangle调用方法返回周长并赋值给length【补充代码】
length=trangle.getLength();
System.out.println("三角形的周长:
"+length);
}
}
运行结果:
圆的周长:
31.41592653589793
圆的面积:
78.53981633974483
三角形的周长:
12.0
三角形的面积:
6.0
梯形的面积:
17.5
不是一个三角形,不能计算面积
三角形的面积:
0.0
不是一个三角形,不能计算周长
三角形的周长:
0.0
3.掌握上转型对象的使用,多态的特性
定义一个抽象(abstract)类,类名为Employee。
Employee的子类有YearWorker、MonthWorker和WeekWorker。
YearWorker对象按年领取薪水(每年10万),MonthWorker对象按月领取薪水(每月1万),WeekWorker对象按周领取薪水(每周0.5万,设定一个月4周)。
Employee类有一个抽象(abstract)方法:
publicabstractdoubleearnings();
子类必须重写父类的earnings()方法,给出各自领取每年报酬的具体方式。
有一个Company类,该类用Employee数组作为成员,Employee数组的单元可以是YearWorker对象、MonthWorker对象、WeekWorker对象的上转型对象。
程序能输出Company对象一年需要支付的薪水总额。
请按模版要求,将代码补充完整。
abstractclassEmployee{
publicabstractdoubleearnings();
}
classYearWorkerextendsEmployee{
//重写earnings()方法【补充代码…】
publicdoubleearnings(){
return100000;
}
}
classMonthWorkerextendsEmployee{
//重写earnings()方法【补充代码…】
publicdoubleearnings(){
return10000;
}
}
classWeekWorkerextendsEmployee{
//重写earnings()方法【补充代码…】
publicdoubleearnings(){
return5000;
}
}
classCompany{
Employee[]employees;
doublesalaries=0;
Company(Employee[]employees){
this.employees=employees;
}
publicdoublesalariesPay(){
salaries=0;
//计算salaries【补充代码…】
for(intj=0;jsalaries+=employees[j].earnings();
}
returnsalaries;
}
}
publicclassHardWork{
publicstaticvoidmain(String[]args){
Employee[]employees=newEmployee[20];
for(inti=0;iif(i%3==0)
employees[i]=newWeekWorker();
elseif(i%3==1)
employees[i]=newMonthWorker();
elseif(i%3==2)
employees[i]=newYearWorker();
}
Companycompany=newCompany(employees);
System.out.println("公司年工资总额:
"+company.salariesPay());
}
}
运行结果:
公司年工资总额:
705000.0
4.掌握嵌套类和内部类的概念和用法
编写一个程序要求定义一个外部类Outer,然后在Outer类中定义一个内部类Inner和局部类Local,内部类Inner和局部类Local的任务都是显示出外部类中的数组元素,然后求出这些数组元素的平均值。
请按模版要求,将代码补充完整。
classOuter{
privateintdata[];
Outer(intx[]){
data=x;
}
voidcheckInner(){
InnerinnerObj=newInner();
//调用Inner对象的show()方法【补充代码】
innerObj.show();
System.out.println("内部类计算的平均值:
"+innerObj.average());
}
voidcheckLocal(){
classLocal{
voidshow(){
System.out.print("从局部类显示数组元素:
");
for(inti=0;iSystem.out.print(data[i]+"");
}
System.out.println();
}
intaverage(){
intsum=0;
for(inti=1;isum+=data[i];
}
returnsum/data.length;//返回data数组的平均值【补充代码】
}
}
LocallocalObj=newLocal();
localObj.show();
System.out.println("局部类计算的平均值:
"+localObj.average());
}
classInner{
voidshow(){
System.out.print("从内部类显示数组元素:
");
for(inti=0;i//打印data数组的每个元素【补充代码】
System.out.print(""+data[i]);
}
System.out.println();
}
intaverage(){
intsum=0;
for(inti=1;isum+=data[i];
}
returnsum/data.length;
}
}
}
publicclassInnerClassTest{
publicstaticvoidmain(String[]args){
inta[]={6,8,9,22,34,7,2,1,15};
OuterouterObj=newOuter(a);
outerObj.checkInner();
//调用outerObj对象的checkLocal方法【补充代码】
outerObj.checkLocal();
}
}
运行结果:
从内部类显示数组元素:
689223472115
内部类计算的平均值:
10
从局部类显示数组元素:
689223472115
局部类计算的平均值:
10
实验总结: