java实验296524.docx
《java实验296524.docx》由会员分享,可在线阅读,更多相关《java实验296524.docx(17页珍藏版)》请在冰豆网上搜索。
![java实验296524.docx](https://file1.bdocx.com/fileroot1/2023-2/9/f686b127-6e15-46b0-9e5c-5939594e4316/f686b127-6e15-46b0-9e5c-5939594e43161.gif)
java实验296524
实验项目名称:
面向对象编实验学时:
8
同组学生姓名:
————实验地点:
1514/A203
实验日期:
实验成绩:
批改教师:
王倩倩批改时间:
一、实验目的和要求
(1)熟练掌握Java语言类定义的基本语法;
(2)熟练掌握类成员的访问控制,对象建立的方法;
(3)熟练掌握类构造方法、成员方法的定义和重载;
(4)熟练掌握类继承、多态和抽象性;
(5)熟练掌握接口的定义和实现方法;
(6)掌握基本的异常处理方法;
(7)调试程序要记录调试过程中出现的问题及解决办法;
(8)编写程序要规范、正确,上机调试过程和结果要有记录,不断积累编程及调试经验;
(9)做完实验后给出本实验的实验报告。
二、实验仪器和设备
奔腾以上计算机,Windows操作系统,装有和Eclipse软件。
三、实验过程
(1)设计复数类,成员变量包括实部和虚部,成员方法包括实现复数加法、减法、字符串描述、比较是否相等等操作。
(2)设计三角形类,继承图形抽象类,实现面积接口和周长接口,计算三角形面积和周长。
(3)包的建立与使用:
设计计算器类Calculator,计算加、减、乘、除,并且打包为mypackage。
观察源文件目录下是否生成了mypackage文件夹,在该文件夹中是否有文件。
编辑,保存在同一目录下,引用计算器类的各方法显示计算结果。
(4)编码实现多态在工资系统中的应用:
给出一个根据雇员类型利用abstract方法和多态性完成工资单计算的程序。
Employee是抽象类,Employee的子类有Boss(每星期发给他固定工资,而不计工作时间)、CommissionWorker(除基本工资外还根据销售额发放浮动工资)、PieceWorker(按其生产的产品数发放工资)、HourlyWorker(根据工作时间长短发放工资)。
该例的Employee的每个子类都声明为final,因为不需要再继承它们生成子类。
在主测试类Test中测试各类雇员工资计算结果。
提示:
对所有雇员类型都使用earnings()方法,但每个人挣的工资按他所属的雇员类计算,所有雇员类都是从超类Employee派出生的。
在超类中声明earnings()为抽象方法,并且对于每个子类都提供恰当的earnings()的实现方法。
为了计算雇员的工资,程序仅仅使用雇员对象的一个超类引用并调用earnings()方法。
在一个实际的工资系统中,各种Employee对象的引用可以通过一个Employee引用数组来实现。
程序依次使用数组的每个元素(Employee引用)调用每个对象的earnings()方法。
Employee类定义如下:
abstractclassEmployee
{
privateStringfirstName;
privateStringlastName;
publicEmployee(Stringfirst,Stringlast)
{
firstName=first;
lastName=last;
}
publicStringgetEmployeeName()
{
returnfirstName;
}
publicStringgetLastName()
{
returnlastName;
}
publicStringtoString()
{
returnfirstName+lastName;
}
publicabstractStringearnings();
}
(5)异常的捕获:
计算两数相除并输出结果。
使用三个catch子句,分别捕捉输入输出异常、除数为0的异常和参数输入有误异常。
import.*;
classEx1
{
publicstaticvoidmain(Stringargs[])
{
try{
BufferedReaderstrin=newBufferedReader(
newInputStreamReader);arseInt(cl);
System.out.print("请输入被除数:
");
cl=strin.readLine();
intb=Integer.parseInt(cl);
intc=b/a;
System.out.println("商为:
"+c);
}
oString());
"两个徐庶的差:
"+(b).toString());
if(b))
{
"两个虚数相等");
}
else
{
"两个虚数不相等");
}
}
}
(1)代码如下:
Point类:
packageshiyan2_2;
publicclassPoint
{
publicintx,y;
publicPoint(intx,inty)
{
=x;
=y;
}
publicPoint()
{
this(0,0);
}
publicStringtoString()
{
return"Point("++","++")";
}
}
figure类:
packageshiyan2_2;
publicclassfigure
{
publicPointpoint1;
protectedStringshape;
protectedfigure(Pointpoint)
{
=point;
}
protectedfigure(Pointpoint,Stringshape)
{
=point;
=shape;
}
protectedfigure()
{
this(newPoint());
}
}
Triangle类:
packageshiyan2_2;
publicclassTriangleextendsfigureimplementsArea,Perimeter
{
publicPointpoint2,point3;
protecteddoublea,b,c;
publicTriangle(Pointp1,Pointp2,Pointp3)
{
super(p1,"三角形");
=p2;
=p3;
=(=(=(}
publicTriangle(Pointp1,doublea,doubleb,doublec)
{
super(p1,"三角形");
=a;
=b;
=c;
}
publicdoublearea()
{
doubles=(a+b+c)/2;
return(s*(s-a)*(s-b)*(s-c));
}
publicdoubleperimeter()
{
returna+b+c;
}
publicStringtoString()
{
return().getName()++",三点坐标"++","+==null"null":
","+==null"null":
",三边长"+("%,%,%",,,;
}
}
Area接口:
packageshiyan2_2;
publicinterfaceArea
{
publicabstractdoublearea();
}
Perimeter接口:
packageshiyan2_2;
publicinterfacePerimeter
{
publicabstractdoubleperimeter();
}
Test类:
packageshiyan2_2;
publicclasstext
{
publicstaticvoidmain(String[]args)
{
Triangletr=newTriangle(newPoint(100,100),newPoint(100,130),newPoint(140,130));
Areaar=tr;
"面积为:
"+("%",()));
Perimeterpe=tr;
"周长为:
"+("%",()));
}
}
(2)代码如下:
packagemypackage;
publicclasscalculator
{
privatedoublex;
publiccalculator(doublexx)
{
=xx;
}
publicdoubleadd(calculatorc)
{
return+;
}
publicdoublesub(calculatorc)
{
return}
publicdoublemul(calculatorc)
{
return*;
}
publicdoublediv(calculatorc)
{
return;
}
publicStringtoString()
{
return""++"";
}
}
packagemypackage;
publicclassPackageDemo
{
publicstaticvoidmain(String[]args)
{
calculatoraa=newcalculator
(1);
calculatorbb=newcalculator
(1);
"加法:
"+()+"+"+()+"="+(bb));
"减法:
"+()+"-"+()+"="+(bb));
"乘法:
"+()+"*"+()+"="+(bb));
"除法:
"+()+"/"+()+"="+(bb));
}
}
(3)代码如下:
Employee类:
packageshiyan2_4;
publicabstractclassEmployee
{
publicEmployee()
{
}
privateStringfirstName;
privateStringlastName;
publicEmployee(Stringfirst,Stringlast)
{
firstName=first;
lastName=last;
}
publicStringgetEmployeeName()
{
returnfirstName;
}
publicStringgetLastName()
{
returnlastName;
}
publicStringtoString()
{
returnfirstName+lastName;
}
publicabstractStringearnings();
}
Employee类:
packageshiyan2_4;
publicfinalclassBossextendsEmployee
{
publicStringearnings()
{
return"通过Boss的工资计算公式计算出老板的工资";
}
}
CommissionWorker类:
packageshiyan2_4;
publicfinalclassCommissionWorkerextendsEmployee
{
publicStringearnings()
{
return"通过CommissionWorker的工资计算公式计算出老板的工资";
}
}
HourlyWorke类:
packageshiyan2_4;
publicfinalclassHourlyWorkerextendsEmployee
{
publicStringearnings()
{
return"通过HourlyWorker的工资计算公式计算出老板的工资";
}
}
PieceWorker类:
packageshiyan2_4;
publicfinalclassPieceWorkerextendsEmployee
{
publicStringearnings()
{
return"通过PieceWorker的工资计算公式计算出老板的工资";
}
}
Text类:
packageshiyan2_4;
publicclasstext
{
publicstaticvoidmain(String[]args)
{
Employeeem=newBoss();
em=newCommissionWorker();
em=newPieceWorker();
em=newHourlyWorker();
}
}
(4)代码如下:
packageshiyan2_5;
import.*;
publicclassEx1
{
publicstaticvoidmain(Stringargs[])
{
Stringcl=null;
try
{
BufferedReaderstrin=newBufferedReader(newInputStreamReader);arseInt(cl);
System.out.print("请输入被除数:
");
cl=strin.readLine();
intb=Integer.parseInt(cl);
intc=b/a;
System.out.println("商为:
"+c);
}
catch(IOExceptionex)
{
"I/O有关的异常");
}
catch(NumberFormatExceptionex)
{
"字符串不能转换成整数");
}
catch(ArithmeticExceptionex)
{
"除数不能0");
}
}
}
(5)代码如下:
自定义异常类:
packageshiyan2_6;
publicclassMyExceptionextendsException
{
publicMyException(Strings)
{
super(s);
}
publicMyException()
{
super();
}
}
packageshiyan2_6;
importclassDivide
{
publicstaticdoublediv(doublea,doubleb)throwsMyException
{
if(a==100&&(b==4||b==13))thrownewMyException("不符合规范");
elsereturna/b;
}
publicstaticvoidmain(Stringargs[])
{
Stringcl=null;
doublea,b;
try
{
BufferedReaderstrin=newBufferedReader(newInputStreamReader);
"请输入被除数:
");
cl=();
a=(cl);
System.out.print("请输入除数:
");
cl=strin.readLine();
b=(cl);
System.out.println("商为:
"+(a,b));
}
catch(IOExceptionex)
{
"I/O有关的异常");
}
catch(NumberFormatExceptionex)
{
"字符串不能转换成整数");
}
catch(ArithmeticExceptionex)
{
"除数不能0");
}catch(MyExceptionex)
{
"输入的数据不规范");
}
}
}
四、实验结果与分析
第
(1)题实验结果:
第一个虚数为:
+
第二个虚数为:
+
两个徐庶的和:
+
两个徐庶的差:
+
两个虚数相等
第
(2)题实验结果:
三角形,三点坐标Point(100,100),Point(100,130),Point(140,130),三边长,,
面积为:
周长为:
第(3)题实验结果:
加法:
+=
减法:
-=
乘法:
*=
除法:
/=
第(4)题实验结果:
通过Boss的工资计算公式计算出老板的工资
通过CommissionWorker的工资计算公式计算出老板的工资
通过PieceWorker的工资计算公式计算出老板的工资
通过HourlyWorker的工资计算公式计算出老板的工资
第(5)题实验结果:
请输入除数:
3o
3o字符串不能转换成整数
请输入除数:
0
请输入被除数:
13
除数不能0
第(6)题实验结果:
请输入被除数:
100
请输入除数:
4
输入的数据不规范
请输入被除数:
100
请输入除数:
13
输入的数据不规范