实验3掌握 Java 如何使用修饰符,方法中参数的传递,类的继承性以及类的多态性
实验类型:●验证性实验 ○综合性实验 ○设计性实验
实验目的:
- 通过实践环节掌握 Java 如何使用修饰符,方法中参数的传递,类的继承性以及类的多态性。
- 通过亲手编程掌握 Java 语言编程的方法,学会使用文件的读写操作。
实验内容:
- 1)编写一个矩形类Circle,该类拥有:
- 一个成员变量:radius(私有,双精度型); // 存放圆的半径;
- 两个构造方法:
- Circle( ) // 将半径设为0
- Circle(double radius) //创建Circle对象时将半径初始化
- 三个成员方法
- double getArea( ) //获取圆的面积
- double getPerimeter( ) //获取圆的周长
- void show( ) //将圆的半径、周长、面积输出到屏幕
- 编写一个继承于上面Circle类的圆柱体类Cylinder,该类拥有:
- 一个成员变量:double hight(私有,浮点型) // 圆柱体的高;
- 一个构造方法:Cylinder (double Radius, double hight) //创建Cylinder类对象时将半径与高初始化
- 两个成员方法
- double getVolume( ) //获取圆柱体的体积
- void showVolume( ) //将圆柱体的体积输出到屏幕
编写应用程序,创建圆柱体类的对象,分别设置圆柱体的底半径、圆柱体的高,计算并分别显示圆柱体的底半径、圆柱体的高以及圆柱体的体积。
- 编写一个Java程序。要求输入5名学生的成绩(从0到100的整数),并将这5个数保存到文件“StudentsData.txt”中。然后再编写一个程序,从文件“Studentsdata.txt”中读取这5个学生的成绩,计算并输出它们的平均成绩,然后再按从高到低的顺序输出这5名学生的成绩。
实验步骤:
- 编写程序代码 。
- 调试程序并记录调试过程中出现的问题及修改程序的过程。
- 经反复调试后,运行程序并验证程序运行是否正确。
- 记录运行时的输入和输出。
实验报告:根据实验情况和结果撰写并递交实验报告。
实验任务的程序运行运行界面及运行结果:
1.
2.
实验总结:
问题一:
通过本次实验,我掌握了Java中类的定义、构造方法的使用、成员方法的编写以及类的继承等基本概念。同时,我也学会了如何使用面向对象的思想来设计和实现简单的几何图形类及其派生类。在实验过程中,我遇到了一些问题,如类的继承关系不明确、成员方法的访问权限设置不当等,但通过查阅资料和反复调试,我最终成功解决了这些问题。
问题二:
通过本次实验,我掌握了Java中的文件操作技术,包括文件的创建、写入、读取以及关闭等。同时,我也学会了如何使用Java进行简单的数据处理,如计算平均值、排序等。在实验过程中,我遇到了一些问题,如文件路径不正确、文件读取失败等,但通过查阅资料和反复调试,我最终成功解决了这些问题。
此外,我还学会了如何编写清晰的代码和进行有效的调试,这对于我未来的学习和工作都非常有帮助。
每个实验任务程序代码:
1.
public class Circle {
// 私有成员变量,存放圆的半径
private double radius;
// 无参构造方法,将半径设为0
public Circle() {
this.radius = 0;
}
// 有参构造方法,初始化半径
public Circle(double radius) {
this.radius = radius;
}
// 获取圆的面积
public double getArea() {
return Math.PI * radius * radius;
}
// 获取圆的周长
public double getPerimeter() {
return 2 * Math.PI * radius;
}
// 将圆的半径、周长、面积输出到屏幕
public void show() {
System.out.println("半径: " + radius);
System.out.println("周长: " + getPerimeter());
System.out.println("面积: " + getArea());
}
// Getter和Setter方法(可选,但推荐用于封装)
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
}
public class Cylinder extends Circle {
// 私有成员变量,圆柱体的高
private double height;
// 构造方法,初始化半径和高
public Cylinder(double radius, double height) {
super(radius); // 调用父类的构造方法初始化半径
this.height = height;
}
// 获取圆柱体的体积
public double getVolume() {
return getArea() * height; // 使用父类的getArea()方法计算底面积,再乘以高得到体积
}
// 将圆柱体的体积输出到屏幕
public void showVolume() {
System.out.println("圆柱体的体积: " + getVolume());
}
// 重写show方法,以显示圆柱体的所有相关信息(可选)
@Override
public void show() {
super.show(); // 调用父类的show方法显示圆的信息
System.out.println("高: " + height);
showVolume(); // 显示圆柱体的体积
}
// Getter和Setter方法(可选,但推荐用于封装)
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public static void main(String[] args) {
// 创建圆柱体对象,并设置底半径和高
Cylinder cylinder = new Cylinder(5.0, 10.0);
// 显示圆柱体的底半径、高和体积
System.out.println("圆柱体的底半径: " + cylinder.getRadius());
System.out.println("圆柱体的高: " + cylinder.getHeight());
cylinder.showVolume(); // 或者使用cylinder.getVolume()来获取体积并自行打印
}
}
2.
import java.io.*;
import java.util.*;
public class StudentScores {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] scores = new int[5];
// 输入5名学生的成绩
System.out.println("请输入5名学生的成绩(从0到100的整数):");
for (int i = 0; i < 5; i++) {
scores[i] = scanner.nextInt();
}
// 将成绩保存到文件
try (BufferedWriter writer = new BufferedWriter(new FileWriter("StudentsData.txt"))) {
for (int score : scores) {
writer.write(score + "\n");
}
} catch (IOException e) {
e.printStackTrace();
}
// 从文件读取成绩并计算平均成绩和排序
List<Integer> scoreList = new ArrayList<>();
try (BufferedReader reader = new BufferedReader(new FileReader("Studentsdata.txt"))) { // 注意文件名大小写
String line;
while ((line = reader.readLine()) != null) {
scoreList.add(Integer.parseInt(line));
}
} catch (IOException e) {
e.printStackTrace();
}
Collections.sort(scoreList, Collections.reverseOrder()); // 按从高到低的顺序排序
double average = scoreList.stream().mapToInt(Integer::intValue).average().orElse(0);
// 输出平均成绩和排序后的成绩
System.out.println("平均成绩: " + average);
System.out.println("成绩从高到低排序:");
for (int score : scoreList) {
System.out.println(score);
}
}}