资源描述
精选
HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGY
JAVA语言程序设计
实验报告
齐心 编著
翟亚红 审核
计算机实验教学示范中心
2013年1月
.
精选
实验二 Java类编程练习
实验目的:
1. 掌握类及类的声明
2. 掌握对象的定义和使用
3. 掌握接口的定义与实现
实验内容:
1. 对象的创建和使用
编写一个圆环类Ring的Java程序。圆环类有3个数据成员,分别是内半径innerRadius,外半径outerRadius和颜色color,这些属性通过get和set方法进行封装。另外,圆环类中的getArea方法可以返回其面积。把程序中的代码补充完整,并查看结果。
public class Ring {
private double innerRadius;
private double outerRadius;
public String color;
public Ring(double iRadius, double oRadius, String c) {
// 初始化数据成员
this.innerRadius = iRadius;
this.outerRadius = oRadius;
this.color = c;
}
.
精选
// 用get和set方法封装数据成员
public double getInnerRadius() {
return innerRadius;
}
public void setInnerRadius(double innerRadius) {
this.innerRadius = innerRadius;
}
public double getOuterRadius() {
return outerRadius;
}
public void setOuterRadius(double outerRadius) {
this.outerRadius = outerRadius;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
.
精选
public double getArea() {
return Math.PI
* (getOuterRadius() * getOuterRadius() - getInnerRadius()
* getInnerRadius());
}
public double geticricle(){ //内周长
return 2*Math.PI*getInnerRadius();
}
public double getocricle(){ //内周长
return 2*Math.PI*getOuterRadius();
}
public static void main(String[] args) {
Ring ring = new Ring(5, 8, "red");
double ring1,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) 将程序中的语句Ring ring = new Ring(5,8,"red"); 改成Ring ring = new Ring();修改后编译运行,此时有错误发生吗?分析错误的原因。
2) 接着为程序添加一个如下所示的默认构造函数,观察程序运行是否还有上述错误发生?
public Ring() {
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)的功能。
把程序中的代码补充完整,并查看结果。
//import javax.swing.text.TabableView;
class Trangle
{
double sideA,sideB,sideC,area,length;
boolean boo;
public Trangle(double a,double b,double c)
{
setABC(a,b,c);//带参数的构造方法
.
精选
}
double getLength() {
if(boo)
{
return sideA+sideB+sideC;
}
else
{
System.out.println("不是一个三角形,不能计算周长");
return 0;
}
}
public double getArea()
{
if(boo)
{
double p=(sideA+sideB+sideC)/2.0;
area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC)) ;
return area;
}
else
{
.
精选
System.out.println("不是一个三角形,不能计算面积");
return 0;
}
}
public void setABC(double a,double b,double c)
{
//参数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;
}
}
.
精选
}
class Lader
{
double above,bottom,height,area;
Lader(double a,double b,double h)
{
//带参数的构造方法,将参数a,b,h分别赋值给above,bottom,height 【补充代码…】
this.above=a;
this.bottom=b;
this.height=h;
}
double getArea()
{
//方法体,,要求计算出area返回
// 【补充代码…】
return 0.5*(above+bottom)*height;
}
}
class Circle
{
double radius,area, length;
.
精选
Circle(double r)
{
//带参数的构造方法 【补充代码
this.radius=r;
}
double getArea()
{
//方法体,要求计算出area返回【补充代码…】
return Math.PI*radius*radius;
}
double getLength()
{
//getArea方法体的代码,要求计算出length返回【补充代码…】
return 2*Math.PI*radius;
}
void setRadius(double newRadius)
{
radius=newRadius;
}
double getRadius()
{
return radius;
.
精选
}
}
public class AreaAndLength
{
public static void main(String args[])
{
double length,area;
Circle circle = null;
Trangle trangle = null;
Lader lader = null;
//创建对象circle(半径为5)【补充代码】
circle=new Circle(5);
//创建对象trangle(边长分别为3,4,5) 【补充代码】
trangle=new Trangle(3,4,5);
//创建对象lader【补充代码】
lader=new Lader(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)方法:
public abstract double earnings();
子类必须重写父类的earnings()方法,给出各自领取每年报酬的具体方式。
有一个Company类,该类用Employee数组作为成员,Employee数组的单元可以是YearWorker对象、MonthWorker对象、WeekWorker对象的上转型对象。程序能输出Company对象一年需要支付的薪水总额。
请按模版要求,将代码补充完整。
abstract class Employee {
public abstract double earnings();
}
class YearWorker extends Employee {
.
精选
//重写earnings()方法【补充代码…】
public double earnings(){
return 100000;
}
}
class MonthWorker extends Employee {
//重写earnings()方法【补充代码…】
public double earnings(){
return 10000;
}
}
class WeekWorker extends Employee {
//重写earnings()方法【补充代码…】
public double earnings(){
return 5000;
}
}
class Company {
Employee[] employees;
double salaries = 0;
Company(Employee[] employees) {
this.employees = employees;
.
精选
}
public double salariesPay() {
salaries = 0;
//计算salaries【补充代码…】
for (int j = 0; j < employees.length; j++){
salaries+=employees[j].earnings();
}
return salaries;
}
}
public class HardWork {
public static void main(String[] args) {
Employee[] employees = new Employee[20];
for (int i = 0; i < employees.length; i++) {
if(i%3==0)
employees[i] = new WeekWorker();
else if(i%3==1)
employees[i] = new MonthWorker();
else if(i%3==2)
employees[i] = new YearWorker();
}
Company company = new Company(employees);
.
精选
System.out.println("公司年工资总额:" + company.salariesPay());
}
}
运行结果:
公司年工资总额:705000.0
4. 掌握嵌套类和内部类的概念和用法
编写一个程序要求定义一个外部类Outer,然后在Outer类中定义一个内部类Inner和局部类Local,内部类Inner和局部类Local的任务都是显示出外部类中的数组元素,然后求出这些数组元素的平均值。
请按模版要求,将代码补充完整。
class Outer {
private int data[];
Outer(int x[]) {
data = x;
}
void checkInner() {
Inner innerObj = new Inner();
// 调用Inner对象的show()方法 【补充代码】
.
精选
innerObj.show();
System.out.println("内部类计算的平均值: " + innerObj.average());
}
void checkLocal() {
class Local {
void show() {
System.out.print("从局部类显示数组元素:");
for (int i = 0; i < data.length; i++) {
System.out.print(data[i] + " ");
}
System.out.println();
}
int average() {
int sum = 0;
for (int i = 1; i < data.length; i++) {
sum += data[i];
}
return sum/data.length; // 返回data数组的平均值【补充代码】
}
}
Local localObj = new Local();
localObj.show();
.
精选
System.out.println("局部类计算的平均值: " + localObj.average());
}
class Inner {
void show() {
System.out.print("从内部类显示数组元素:");
for (int i = 0; i < data.length; i++) {
// 打印data数组的每个元素【补充代码】
System.out.print(" "+data[i]);
}
System.out.println();
}
int average() {
int sum = 0;
for (int i = 1; i < data.length; i++) {
sum += data[i];
}
return sum / data.length;
}
}
}
public class InnerClassTest {
public static void main(String[] args) {
.
精选
int a[] = { 6, 8, 9, 22, 34, 7, 2, 1, 15 };
Outer outerObj = new Outer(a);
outerObj.checkInner();
// 调用outerObj对象的checkLocal方法【补充代码】
outerObj.checkLocal();
}
}
运行结果:
从内部类显示数组元素: 6 8 9 22 34 7 2 1 15
内部类计算的平均值: 10
从局部类显示数组元素:6 8 9 22 34 7 2 1 15
局部类计算的平均值: 10
实验总结:
本文档部分内容来源于网络,如有内容侵权请告知删除,感谢您的配合!
.
展开阅读全文