1.定义一个抽象类computer,具有对一个一维数组求平 均值的抽象方法 2.SongGame类继承于Computer类,重写父类方法,求 出歌手比赛的平均分,计算规则是去掉最高分和最低 分后,求平均值。 写测试类,用上转型对象来调用歌手比赛求平均分的 功能。
时间: 2024-10-16 14:12:03 浏览: 84
首先,我们定义一个名为`Computer`的抽象类,它有一个抽象方法`average()`,用于计算一维数组的平均值:
```java
abstract class Computer {
abstract double average(double[] array);
}
```
然后,我们创建一个名为`SongGame`的具体类,该类继承自`Computer`并实现了`average()`方法,适应歌手比赛的计分规则:
```java
class SongGame extends Computer {
private double highestScore;
private double lowestScore;
public void updateHighestLowestScores(double score) {
if (highestScore == 0 || score > highestScore) {
highestScore = score;
}
if (lowestScore == 0 || score < lowestScore) {
lowestScore = score;
}
}
@Override
double average(double[] scores) {
if (scores.length <= 1) {
return scores[0];
}
// 排序分数、移除最高分和最低分
Arrays.sort(scores);
scores = Arrays.copyOfRange(scores, 1, scores.length - 1);
double sum = 0;
for (double score : scores) {
sum += score;
}
return sum / (scores.length - 2); // 去掉最高分和最低分后的平均
}
}
```
接下来,我们可以编写一个测试类来演示如何通过转型调用`SongGame`类的`average()`方法:
```java
public class Test {
public static void main(String[] args) {
SongGame songGame = new SongGame();
double[] scores = {85, 92, 78, 96, 88}; // 假设这是歌手比赛得分
// 更新最高分和最低分
for (double score : scores) {
songGame.updateHighestLowestScores(score);
}
// 使用转型调用平均分计算
double averageScore = ((Computer) songGame).average(scores);
System.out.println("歌手比赛平均分: " + averageScore);
}
}
```
阅读全文