本科生实验报告
实验课程 Java语言程序设计 学院名称 信息科学与技术学院 专业名称 软件工程 学生姓名
学生学号
指导教师
实验地点 6A502 实验成绩
二〇一五年一月八日
Java语言程序设计上机实验报告
摘要
本实验报告用于记录在Java语言程序设计课程开设的上机实验中记录上机实验过程,以激励自己学习进步并为将来的学习提供一系列参考资料。
关键字 Java语言;实验;编程;语法;算法
第1章 实验一
1.1 设计一个名为RegularPolygon的正n边形类
1.1.1 要求
一个名为n的int型私有数据域定义多边形的边数,默认值为3。
一个名为side的double型私有数据域存储边的长度,默认值为1。
一个名为x的double型私有数据域,它定义多边形中点的x坐标,默认值为0。 一个名为y的double型私有数据域,它定义多边形中点的y坐标,默认值为0。 一个创建带默认值的正多边形的无参构造方法。
一个能创建带指定边数和边长度、中心在(0,0)的正多边形的构造方法。
一个能创建带指定边数和边长度、中心在(x,y)的正多边形的构造方法。
所有数据域的get和set方法。
一个返回多边形周长的方法getPerimeter()。
一个返回多边形面积的方法getArea()。计算正多边形面积的公式是:面积=(n*side2)/(4*tan(180/n))
分别使用无参构造方法、 RegularPolygon (6,4)和RegularPolygon(10,4,5.6,7.8)创建三个RegularPolygon对象,并显示每个对象的周长和面积。
1.1.2 代码
2 //RegularPolygon.java
3
4
5
6
7
8
9 public class RegularPolygon { private int n = 3;//一个名为n的型私有数据域定义多边形的边数,默认值为3。 private double side = 1;//一个名为side的double型私有数据域存储边的长度,默认值为1。 private double x = 0;//一个名为x的double型私有数据域,它定义多边形中点的x坐标,默认值为0。 private double y = 0;//一个名为y的double型私有数据域,它定义多边形中点的y坐标,默认值为0。
//一个创建带默认值的正多边形的无参构造方法。
public RegularPolygon(){
this.setN(3);
setSide(1);
setX(0);
setY(0);
}
//一个能创建带指定边数和边长度、中心在(0,0)的正多边形的构造方法。
public RegularPolygon(int n, double side){
this.setN(n);
this.setSide(side);
setX(0);
setY(0);
}
//一个能创建带指定边数和边长度、中心在(x,y)的正多边形的构造方法。
public RegularPolygon(int n, double side, double x, double y){
this.setN(n);
this.setSide(side);
this.setX(x);
this.setY(y);
}
//所有数据域的get和set方法。
public int getN() {
return n;
}
public void setN(int n) {
this.n = n;
}
public double getSide() {
return side;
} 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77 }
//main
public class main {
public static void //使用无参方法构造一个对象 RegularPolygon r1 = new RegularPolygon(); //使用RegularPolygon(6, 4)方法构造一个对象 RegularPolygon r2 = new RegularPolygon(6, 4); //使用RegularPolygon(10, 4, 5.6, 7.8)方法构造一个对象 RegularPolygon r3 = new RegularPolygon(10, 4, 5.6, 7.8); //显示每个对象的周长和面积; public void setY(double y) { this.y = y; } //一个返回多边形周长的方法getPerimeter()。 public double getPerimeter(){ return n * side; } //一个返回多边形面积的方法getArea()。计算正多边形面积的公式是:面积=(n*side2)/(4*tan(180/n)) public double getArea(){ return (n * side * side)/(4 * Math.tan(Math.PI/n)); } public double getY() { return y; } public void setX(double x) { this.x = x; } public double getX() { return x; } public void setSide(double side) { this.side = side; }
}
} outSystem.out.println("两个参数多边形的面积是:\t" + r2.getArea() + "\t周长为:\t" + System.out.println("四个参数多边形的面积是:\t" + r3.getArea() + "\t周长为:\t" + r1.getPerimeter()); r2.getPerimeter()); r3.getPerimeter());
1.2 设计一个名为Account的账户类
1.2.1 要求
一个名为id的int类型的私有账户数据域(默认值0)
一个名为balance的double类型的私有数据域存储余额(默认值0)
一个名为annualInterestRate的double类型的私有数据域存储当前利率(默认值0)。
假设所有的账户都有相同的利率。
一个名为dateCreated的Date类型的私有数据域存储账户开户日期。(import
java.util.Date)
一个能创建默认账户的无参构造方法。
一个能创建带特定id和初始余额的的账户的构造方法。
id、balance和annualInterestRate的get和set方法
dateCreated的get方法
一个名为getMonthlyInterestRate()的方法返回月利率。
一个名为withDraw的方法从账户提款。
一个名为deposit的方法向账户存款。
编写一个测试程序,创建一个账户id为123、余额为2000元、年利率为4.5%的Account
对象。使用withDraw方法取款200元,使用deposit方法存款3000元,然后打印余额、月利息以及这个账户的开户日期。
1.2.2 代码
//Account.java
package Account;
import java.util.Date;
public class Account {
//一个名为id的类型的私有账户数据域(默认值0) private int id = 0; //一个名为balance的double类型的私有数据域存储余额(默认值0)
//一个名为annualInterestRate的double类型的私有数据域存储当前利率(默认值0)。 private double annualInterestRate = 0; //一个名为dateCreated的Date类型的私有数据域存储账户开户日期。 private Date dateCreated; //一个能创建默认账户的无参构造方法。 public Account(){ } //一个能创建带特定id和初始余额的的账户的构造方法。 public Account(int id, double balance){ } //id、balance和annualInterestRate的get和set方法 public int getId() { } public void setId(int id) { } public double getBalance() { } public void setBalance(double balance) { } public double getAnnualInterestRate() { } public void setAnnualInterestRate(double annualInterestRate) { } //dateCreated的get方法 public Date getDateCreated() { } return dateCreated; this.annualInterestRate = annualInterestRate; return annualInterestRate; this.balance = balance; return balance; this.id = id; return id; this.setId(id); this.setBalance(balance); dateCreated = new Date(); this.setId(0); this.setBalance(0); dateCreated = new Date();
} //一个名为getMonthlyInterestRate()的方法返回月利率 public double getMonthlyInterestRate(){ } //一个名为withDraw的方法从账户提款。 public double withDraw(double draw){ } //一个名为deposit的方法向账户存款。 public double deposit(double deposit){ } setBalance(getBalance() + deposit); return deposit; if(draw <= getBalance()){ } setBalance(getBalance() - draw); return draw; return 0; return getAnnualInterestRate()/12; }else{
//main
package Account;
public class Main {
} public static void main(String[] args){ } //创建一个账户id为123、余额为2000元、年利率为4.5%的Account对象。 Account account = new Account(123, 2000); account.setAnnualInterestRate(0.045); //使用withDraw方法取款200元 account.withDraw(200); //使用deposit方法存款3000元 account.deposit(3000); //然后打印余额、月利息以及这个账户的开户日期。 System.out.println("账户 "+account.getId()+" 的余额为:\t" + System.out.println("月利息为:\t" + account.getMonthlyInterestRate() * System.out.println("开户日期:\t" + account.getDateCreated()); account.getBalance()); account.getBalance());
第2章 实验二
2.1三角形类Triangle
2.1.1 要求
设计一个三角形类Triangle来扩展Geometricobject类,该类包括: 三个名为side1, side2和side3的double数据域表示这个三角形的三条边,它们的默认值是1.0
一个无参构造方法创建默认的三角形
一个能创建指定side1, side2和side3的三角形的构造方法 所有三个数据域的get方法
一个名为getArea()的方法返回这个三角形的面积 ,计算公式为s=(side1+ side2+ side3)/2
一个名为getPerimeter()的方法返回这个三角形的周长
编写测试程序,创建边长为1、1.5和1,颜色为yellow,filled为true的Triangle对象,然后显示它的面积、周长、颜色以及是否被填充 显示以该对象创建的具有三角形底的Pillar类对象的体积。
2.1.2 代码
//Geometricobject.java
package Geometricobject;
public abstract class Geometricobject {
}
//Pillar.java
package Geometricobject; private String color = "White"; private String filled = "false"; public abstract double getArea(); public abstract double getPerimeter(); public String getColor() { } public void setColor(String color) { } public String getFilled() { } public void setFilled(String filled) { } this.filled = filled; return filled; this.color = color; return color;
public class Pillar {
}
//Triangle
package Geometricobject;
//设计一个三角形类Triangle来扩展
public class Triangle extends Geometricobject{
1.0
//一个名为getArea()的方法返回这个三角形的面积 ,计算公式为s=(side1+ side2+ side3)/2 private double side1 = 1.0; private double side2 = 1.0; private double side3 = 1.0; //一个无参构造方法创建默认的三角形 public Triangle(){} //一个能创建指定side1, side2和side3的三角形的构造方法 public Triangle(double side1, double side2, double side3){ } //所有三个数据域的get方法 public double getSide1() { } public double getSide2() { } public double getSide3() { } return side3; return side2; return side1; this.side1 = side1; this.side2 = side2; this.side3 = side3; //三个名为side1, side2和side3的double数据域表示这个三角形的三条边,它们的默认值private Geometricobject geometricobject; private double height; public Pillar(Geometricobject geometricobject, double height){ } public double getVolume(){ } return height * geometricobject.getArea(); this.geometricobject = geometricobject; this.height = height;
}; } //一个名为getPerimeter()的方法返回这个三角形的周长 public double getPerimeter(){ } return this.side1 + this.side2 + this.side3; return (this.side1 + this.side2 + this.side3)/2;
//main.java
package Main;
import Geometricobject.*;
public class Main {
} public static void main(String[] argv){ } Triangle triangle = new Triangle(1, 1.5, 1); triangle.setColor("yellow"); triangle.setFilled("true"); System.out.println("面积\t" + triangle.getArea()); System.out.println("周长\t" + triangle.getPerimeter()); System.out.println("颜色\t" + triangle.getColor()); System.out.println("是否填充\t" + triangle.getFilled()); Pillar pillar = new Pillar(triangle, 2); System.out.println("Pillar类的对象体积\t" + pillar.getVolume());
2.2设计一个名为Person的类和它的两个名为Student和Employee的子类
2.2.1 要求
Employee类又有子类:教员类Faculty和职员类Staff。 每个人都有姓名、地址、电话号码 学生有班级号 教员有级别 职员有职务称号 覆盖每个类的toString方法,显示相应的类名和人名 编写测试程序,创建Person、 Student、Employee Faculty和Staff,并调用它们的
toString方法
2.2.2 代码
//Employee.java
package Class;
//Person的子类Employee
public class Employee extends Person {
}
//Faculty.java
package Class;
//Employee的子类Faculty
public class Faculty extends Employee {
}
//Person.java
package Class;
//设计一个名为Person的类
public class Person {
}
//Staff.java
package Class; private String name; private String ; private String ; public Person(String name, String address, String phonenumber){ } //覆盖每个类的toString方法,显示相应的类名和人名 public String toString(){ } return this.getClass().getName() + "\t姓名 :" + name; http:// = name; this.address = address; this.phonenumber = phonenumber; //教员有级别 private String ; public Faculty(String name, String address, String phonenumber, String level){ } super(name, address, phonenumber); this.level = level; publicname, String address, String phonenumber){ } super(name, address, phonenumber);
//Employee的子类Staff
public class Staff extends Employee {
}
//Student.java
package Class;
//Person的子类Student
public class Student extends Person{
}
//Main.java
package Main;
import Class.*;
public class Main {
} public static void main(String[] args) { } //创建Person、 Student、Employee Faculty和Staff Person person = new Person("Person", "ddd", "222"); Student student = new Student("Student", "ddd", "2", 5); Employee employee = new Employee("Employee", "ddd", "33"); Faculty faculty = new Faculty("Factuly", "ddd", "22", "level"); Staff staff = new Staff("Staff", "ddd", "222", "professionaltitle"); System.out.println(person.toString()); System.out.println(student.toString()); System.out.println(employee.toString()); System.out.println(faculty.toString()); System.out.println(staff.toString()); //学生有班级号 private int ; public Student(String name, String address, String phonenumber, int classnumber){ } super(name, address, phonenumber); this.classnumber = classnumber; //职员有职务称号 private String ; public Staff(String name, String address, String phonenumber, String professionaltitle){ } super(name, address, phonenumber); this.professionaltitle = professionaltitle;
第3章 实验三
3.1求几何对象的面积之和
3.1.1 要求
编写一个方法,求参数列表中所有几何对象的面积之和。方法签名如下: public static double sumArea(GeometricObject… a)
编写测试程序,创建4个对象(2个矩形,2个三角形),然后使用sumArea方法求它们的总面积。
可变参数用法参考书58页,同时请大家使用增强的for语句编程。
3.1.2 代码
public static double sumArea(Geometricobject...list){
} double sum = 0; for(Geometricobject param:list){ } return sum; sum += param.getArea();
3.2实现可比较大小的RegularPolygon类和 Triangle类
3.2.1 要求
扩展实验一中的RegularPolygon 类和实验二中的Triangle类,使之都实现Comparable接口。
编写测试程序,测试新的RegularPolygon 类和Triangle类
3.2.2 代码
//ComparableGeometricobject.java
package Geometricobject;
public abstract class ComparableGeometricobject extends Geometricobject implements
public int compareTo(ComparableGeometricobject o){ return 1; return -1; Comparable<ComparableGeometricobject> { if(getArea() > (o.getArea())) else if ((getArea()) < (o.getArea()))
else
} }
//ComparableRegularPolygon.java
package Geometricobject;
public class ComparableRegularPolygon extends ComparableGeometricobject {
public double getSide() { } return side; public void setN(int n) { } this.n = n; public int getN() { } return n; private int n = 3; private double side = 1; private double x = 0; private double y = 0; public ComparableRegularPolygon(){ } public ComparableRegularPolygon(int n, double side){ } public ComparableRegularPolygon(int n, double side, double x, double y){ } this.setN(n); this.setSide(side); this.setX(x); this.setY(y); this.setN(n); this.setSide(side); setX(0); setY(0); this.setN(3); setSide(1); setX(0); setY(0);
}
//ComparableRectangle.java
package Geometricobject;
public class ComparableRectangle extends ComparableGeometricobject{
private double width = 1.0; private double height = 1.0; public ComparableRectangle(){} public ComparableRectangle(double width, double height){ } public double getArea(){ return width * height;} this.width = width; this.height = height; public void setY(double y) { } public double getPerimeter(){ } public double getArea(){ } return (n * side * side)/(4 * Math.tan(Math.PI/n)); return n * side; this.y = y; public double getY() { } return y; public void setX(double x) { } this.x = x; public double getX() { } return x; public void setSide(double side) { } this.side = side;
} public double getWidth(){ return this.width;} public double getHeight(){ return this.height;}
//ComparableTriangle.java
package Geometricobject;
public class ComparableTriangle extends ComparableGeometricobject{
} private double side1 = 1.0; private double side2 = 1.0; private double side3 = 1.0; public ComparableTriangle(){} public ComparableTriangle(double side1, double side2, double side3){ } public double getSide1() { } public double getSide2() { } public double getSide3() { } public double getArea(){ } public double getPerimeter(){ } return this.side1 + this.side2 + this.side3; return (this.side1 + this.side2 + this.side3)/2; return side3; return side2; return side1; this.side1 = side1; this.side2 = side2; this.side3 = side3;