编写一个ComputerAverage抽象类, 类中有一个成员变量double类型的数组data 和一个抽象方法求平均分averase (double[] data) 定义Athletes类和Student类,它们都是ComputerAverage的子类, Atheletic类中计算选手的平均成绩的方法是去掉一个最低分,去掉一个最高分,然后求平均分。 Student类中计算平均分的方法是直接是总分除以总科目。 要求:编写测试程序,创建GomputerAverage类型的ArrayList动态数组,保存若干个Student类对象和Atheletic对象, 遍历动态数组来输出这些对象的平均分。
时间: 2024-03-20 14:44:53 浏览: 57
以下是Java实现:
```
import java.util.ArrayList;
abstract class ComputerAverage {
protected double[] data;
public abstract double average(double[] data);
}
class Athlete extends ComputerAverage {
public double average(double[] data) {
double sum = 0;
double min = data[0];
double max = data[0];
for (int i = 0; i < data.length; i++) {
sum += data[i];
if (data[i] < min) {
min = data[i];
}
if (data[i] > max) {
max = data[i];
}
}
return (sum - min - max) / (data.length - 2);
}
}
class Student extends ComputerAverage {
public double average(double[] data) {
double sum = 0;
for (int i = 0; i < data.length; i++) {
sum += data[i];
}
return sum / data.length;
}
}
public class Test {
public static void main(String[] args) {
ArrayList<ComputerAverage> list = new ArrayList<ComputerAverage>();
list.add(new Athlete());
list.add(new Student());
double[] data1 = {9.0, 8.0, 7.0, 6.0, 5.0};
double[] data2 = {80.0, 70.0, 90.0, 85.0, 95.0};
for (ComputerAverage obj : list) {
if (obj instanceof Athlete) {
System.out.println("Athlete average score: " + obj.average(data1));
} else if (obj instanceof Student) {
System.out.println("Student average score: " + obj.average(data2));
}
}
}
}
```
在这个程序中,我们首先定义了一个抽象类 `ComputerAverage`,其中包含一个 `double` 类型的数组 `data` 和一个抽象方法 `average`,该方法用于计算平均分。然后我们定义了两个子类 `Athlete` 和 `Student`,它们都是 `ComputerAverage` 的子类,并且实现了抽象方法 `average`。
在 `Athlete` 类中,我们重写了 `average` 方法,先计算出所有成绩的总和,并找到最低分和最高分,然后将最低分和最高分从总分中减去,并用总分除以剩余的成绩个数来计算平均分。
在 `Student` 类中,我们直接计算出成绩的总和,并用总和除以成绩个数来计算平均分。
最后,我们创建了一个 `ArrayList` 动态数组,保存了若干个 `Student` 类对象和 `Athlete` 类对象。然后我们遍历动态数组,对于每个对象,我们判断它是哪个类的实例,然后调用相应的 `average` 方法来计算平均分。
阅读全文