资源描述
实验项目名称: 面向对象编 实验学时: 8
同组学生姓名: ———— 实验地点: 1514 /A203
实验日期: 4、13/4、15/4、20/4、22 实验成绩:
批改教师: 王倩倩 批改时间:
一、实验目得与要求
(1)熟练掌握Java语言类定义得基本语法;
(2)熟练掌握类成员得访问控制,对象建立得方法;
(3)熟练掌握类构造方法、成员方法得定义与重载;
(4)熟练掌握类继承、多态与抽象性;
(5)熟练掌握接口得定义与实现方法;
(6)掌握基本得异常处理方法;
(7)调试程序要记录调试过程中出现得问题及解决办法;
(8)编写程序要规范、正确,上机调试过程与结果要有记录,不断积累编程及调试经验;
(9) 做完实验后给出本实验得实验报告。
二、实验仪器与设备
奔腾以上计算机,Windows 操作系统,装有JDK1、7与Eclipse软件。
三、实验过程
(1) 设计复数类,成员变量包括实部与虚部,成员方法包括实现复数加法、减法、字符串描述、比较就是否相等等操作。
(2) 设计三角形类,继承图形抽象类,实现面积接口与周长接口,计算三角形面积与周长。
(3) 包得建立与使用:设计计算器类Calculator,计算加、减、乘、除,并且打包为mypackage。观察源文件目录下就是否生成了mypackage文件夹,在该文件夹中就是否有Calculate、class文件。编辑PackageDemo、java,保存在Calculator、java同一目录下,引用计算器类得各方法显示计算结果。
(4) 编码实现多态在工资系统中得应用:给出一个根据雇员类型利用abstract方法与多态性完成工资单计算得程序。Employee就是抽象类,Employee得子类有Boss(每星期发给她固定工资,而不计工作时间)、missionWorker(除基本工资外还根据销售额发放浮动工资)、PieceWorker(按其生产得产品数发放工资)、HourlyWorker(根据工作时间长短发放工资)。该例得Employee得每个子类都声明为final,因为不需要再继承它们生成子类。在主测试类Test中测试各类雇员工资计算结果。
提示:对所有雇员类型都使用earnings方法,但每个人挣得工资按她所属得雇员类计算,所有雇员类都就是从超类Employee派出生得。在超类中声明earnings为抽象方法,并且对于每个子类都提供恰当得earnings得实现方法。为了计算雇员得工资,程序仅仅使用雇员对象得一个超类引用并调用earnings方法。在一个实际得工资系统中,各种Employee对象得引用可以通过一个Employee引用数组来实现。程序依次使用数组得每个元素(Employee引用)调用每个对象得earnings方法。
Employee类定义如下:
abstract class Employee
{
private String firstName;
private String lastName;
public Employee(String first,String last)
{
firstName=first;
lastName=last;
}
public String getEmployeeName
{
return firstName;
}
public String getLastName
{
return lastName;
}
public String toString
{
return firstName+lastName;
}
public abstract String earnings;
}
(5)异常得捕获:计算两数相除并输出结果。使用三个catch子句,分别捕捉输入输出异常、除数为0得异常与参数输入有误异常。
import java、io、*;
class Ex1
{
public static void main(String args[ ])
{
try{
BufferedReader strin=new BufferedReader(
new InputStreamReader(System、in));//建立输入流缓冲区
System、out、print("请输入除数:");
String cl=strin、readLine;//键盘输入
int a=Integer 、parseInt(cl);
System 、out 、print("请输入被除数:");
cl=strin 、readLine;
int b=Integer 、parseInt(cl);
int c=b/a;
System 、out 、println("商为:"+c);
}
//捕获与I/O有关得异常(空白处补全捕获语句)
//捕获数值转化时得异常,如不能将字符转化成数值
//捕获除数为0得异常
}
}
编译并运行,当产生输入输出异常时显示异常信息;当输入除数为0时,出现算术异常,提示除数为0,并要求重新输入;当输入得不就是整数时,如将30输成了3o,出现数值格式异常,提示输入整数。
思考:就是否还有其她异常需要捕获处理?
(6)编写程序包含自定义异常MyException,当100被13与4除时抛出该异常,其余除数显示商值。
要求:
(1) 注意选用适当得类成员修饰符(private、protected、public等),比较它们得使用情况;
(2) 养成良好得编程习惯,严格按照命名规则为包、类及类成员命名,将每个程序打包,包得命名方式如two、num1表示实验二得第一题;
(3) 学会使用Eclipse得各种调试方法;
(4) 学会查阅Java API文档,如查找异常类得使用方法。
程序清单:
(建议程序中适当添加注释信息,增强可读性;较长程序可分栏书写,保证报告排版整洁美观。)
(1) 代码如下:
package shiyan2_1;
public class plexnumber
{
private double real,imag;
public plexnumber(double r,double i)
{
this、real=r;
this、imag=i;
}
public plexnumber add(plexnumber c)
{
plexnumber temp=new plexnumber(0,0);
temp、real=this、real+c、real;
temp、imag=this、imag+c、imag;
return temp;
}
public plexnumber sub(plexnumber c)
{
plexnumber temp=new plexnumber(0,0);
temp、real=this、realc、real;
temp、imag=this、imagc、imag;
return temp;
}
public boolean equals(plexnumber c)
{
if( this==c||this、real==c、real&&this、imag==c、imag)
{
return true;
}
return false;
}
public String toString
{
return this、real+"+"+this、imag+"i";
}
public static void main(String[] args)
{
plexnumber a=new plexnumber(1,2);
System、out、println("第一个虚数为:"+a、toString);
plexnumber b=new plexnumber(1,2);
System、out、println("第二个虚数为:"+b、toString);
System、out、println("两个徐庶得与:"+a、add(b)、toString);
System、out、println("两个徐庶得差:"+a、sub(b)、toString);
if(a、equals(b))
{
System、out、println("两个虚数相等");
}
else
{
System、out、println("两个虚数不相等");
}
}
}
(2) 代码如下:
Point类:
package shiyan2_2;
public class Point
{
public int x,y;
public Point(int x,int y)
{
this、x=x;
this、y=y;
}
public Point
{
this(0,0);
}
public String toString
{
return "Point("+this、x+","+this、y+")";
}
}
figure类:
package shiyan2_2;
public class figure
{
public Point point1;
protected String shape;
protected figure(Point point)
{
this、point1=point;
}
protected figure(Point point,String shape)
{
this、point1=point;
this、shape=shape;
}
protected figure
{
this(new Point);
}
}
Triangle类:
package shiyan2_2;
public class Triangle extends figure implements Area,Perimeter
{
public Point point2,point3;
protected double a,b,c;
public Triangle(Point p1,Point p2,Point p3)
{
super(p1,"三角形");
this、point2=p2;
this、point3=p3;
this、a=Math、sqrt((point1、xpoint2、x)*(point1、xpoint2、x)+(point1、ypoint2、y)*(point1、ypoint2、y));
this、b=Math、sqrt((point2、xpoint3、x)*(point2、xpoint3、x)+(point2、ypoint3、y)*(point2、ypoint3、y));
this、c=Math、sqrt((point3、xpoint1、x)*(point3、xpoint1、x)+(point3、ypoint1、y)*(point3、ypoint1、y));
}
public Triangle(Point p1,double a,double b,double c)
{
super(p1,"三角形");
this、a=a;
this、b=b;
this、c=c;
}
public double area
{
double s=(a+b+c)/2;
return Math、sqrt(s*(sa)*(sb)*(sc));
}
public double perimeter
{
return a+b+c;
}
public String toString
{
return this、getClass、getName+this、shape+",三点坐标"+this、point1+","+(this、point2==null?"null":this、point2、toString)+","+(this、point3==null?"null":this、point3、toString)+",三边长"+String、format("%1、2f,%1、2f,%1、2f",this、a,this、b,this、c);
}
}
Area接口:
package shiyan2_2;
public interface Area
{
public abstract double area;
}
Perimeter接口:
package shiyan2_2;
public interface Perimeter
{
public abstract double perimeter;
}
Test类:
package shiyan2_2;
public class text
{
public static void main(String[] args)
{
Triangle tr=new Triangle(new Point(100,100),new Point(100,130),new Point(140,130));
Area ar=tr;
System、out、println(tr、toString);
System、out、println("面积为:"+String、format("%1、2f",ar、area));
Perimeter pe=tr;
System、out、println("周长为:"+String、format("%1、2f",pe、perimeter));
}
}
(3) 代码如下:
package mypackage;
public class calculator
{
private double x;
public calculator(double xx)
{
this、x=xx;
}
public double add(calculator c)
{
return (this、x+c、x);
}
public double sub(calculator c)
{
return (this、xc、x);
}
public double mul(calculator c)
{
return (this、x*c、x);
}
public double div(calculator c)
{
return (this、x/c、x);
}
public String toString
{
return " "+this、x+" ";
}
}
package mypackage;
public class PackageDemo
{
public static void main(String[] args)
{
calculator aa=new calculator(1);
calculator bb=new calculator(1);
System、out、println("加法:"+aa、toString+"+"+bb、toString+"="+aa、add(bb));
System、out、println("减法:"+aa、toString+""+bb、toString+"="+aa、sub(bb));
System、out、println("乘法:"+aa、toString+"*"+bb、toString+"="+aa、mul(bb));
System、out、println("除法:"+aa、toString+"/"+bb、toString+"="+aa、div(bb));
}
}
(4) 代码如下:
Employee类:
package shiyan2_4;
public abstract class Employee
{
public Employee
{
}
private String firstName;
private String lastName;
public Employee(String first,String last)
{
firstName=first;
lastName=last;
}
public String getEmployeeName
{
return firstName;
}
public String getLastName
{
return lastName;
}
public String toString
{
return firstName+lastName;
}
public abstract String earnings;
}
Employee类:
package shiyan2_4;
public final class Boss extends Employee
{
public String earnings
{
return "通过Boss得工资计算公式计算出老板得工资";
}
}
missionWorker类:
package shiyan2_4;
public final class missionWorker extends Employee
{
public String earnings
{
return "通过missionWorker得工资计算公式计算出老板得工资";
}
}
HourlyWorke类:
package shiyan2_4;
public final class HourlyWorker extends Employee
{
public String earnings
{
return "通过HourlyWorker得工资计算公式计算出老板得工资";
}
}
PieceWorker类:
package shiyan2_4;
public final class PieceWorker extends Employee
{
public String earnings
{
return "通过PieceWorker得工资计算公式计算出老板得工资";
}
}
Text类:
package shiyan2_4;
public class text
{
public static void main(String[] args)
{
Employee em=new Boss;
System、out、println(em、earnings);
em=new missionWorker;
System、out、println(em、earnings);
em=new PieceWorker;
System、out、println(em、earnings);
em=new HourlyWorker;
System、out、println(em、earnings);
}
}
(5) 代码如下:
package shiyan2_5;
import java、io、*;
public class Ex1
{
public static void main(String args[ ])
{
String cl=null;
try
{
BufferedReader strin=new BufferedReader(new InputStreamReader(System、in));//建立输入流缓冲区
System、out、print("请输入除数:");
cl=strin、readLine;//键盘输入
int a=Integer 、parseInt(cl);
System 、out 、print("请输入被除数:");
cl=strin 、readLine;
int b=Integer 、parseInt(cl);
int c=b/a;
System 、out 、println("商为:"+c);
}
catch(IOException ex)
{
System、out、println("I/O有关得异常");
}
catch(NumberFormatException ex)
{
System、out、println(cl+"字符串不能转换成整数");
}
catch(ArithmeticException ex)
{
System、out、println("除数不能0");
}
}
}
(6) 代码如下:
自定义异常类:
package shiyan2_6;
public class MyException extends Exception
{
public MyException(String s)
{
super(s);
}
public MyException
{
super;
}
}
package shiyan2_6;
import java、io、BufferedReader;
import java、io、IOException;
import java、io、InputStreamReader;
public class Divide
{
public static double div(double a,double b) throws MyException
{
if(a==100&&(b==4||b==13)) throw new MyException("不符合规范");
else return a/b;
}
public static void main(String args[ ])
{
String cl=null;
double a,b;
try
{
BufferedReader strin=new BufferedReader(new InputStreamReader(System、in));
System、out、print("请输入被除数:");
cl=strin、readLine;
a=Double、parseDouble(cl);
System 、out 、print("请输入除数:");
cl=strin 、readLine;
b=Double、parseDouble(cl);
System 、out 、println("商为:"+Divide、div(a,b));
}
catch(IOException ex)
{
System、out、println("I/O有关得异常");
}
catch(NumberFormatException ex)
{
System、out、println(cl+"字符串不能转换成整数");
}
catch(ArithmeticException ex)
{
System、out、println("除数不能0");
}catch(MyException ex)
{
System、out、println("输入得数据不规范");
}
}
}
四、实验结果与分析
第(1)题实验结果:
第一个虚数为:1、0+2、0i
第二个虚数为:1、0+2、0i
两个徐庶得与:2、0+4、0i
两个徐庶得差:0、0+0、0i
两个虚数相等
第(2)题实验结果:
shiyan2_2、Triangle三角形,三点坐标Point(100,100),Point(100,130),Point(140,130),三边长30、00,40、00,50、00
面积为:600、00
周长为:120、00
第(3)题实验结果:
加法: 1、0 + 1、0 =2、0
减法: 1、0 1、0 =0、0
乘法: 1、0 * 1、0 =1、0
除法: 1、0 / 1、0 =1、0
第(4)题实验结果:
通过Boss得工资计算公式计算出老板得工资
通过missionWorker得工资计算公式计算出老板得工资
通过PieceWorker得工资计算公式计算出老板得工资
通过HourlyWorker得工资计算公式计算出老板得工资
第(5)题实验结果:
请输入除数:3o
3o字符串不能转换成整数
请输入除数:0
请输入被除数:13
除数不能0
第(6)题实验结果:
请输入被除数:100
请输入除数:4
输入得数据不规范
请输入被除数:100
请输入除数:13
输入得数据不规范
展开阅读全文