Java比赛选手的平均成绩是去掉一个最高分和最低分后再计算平均分,学生考试成绩是算所有成绩的平均分,设计一个接口,包含抽象方法,表示计算年均成绩的方式;设计比赛选手和学生类实现接口,重写抽象方法,表示计算不同
时间: 2024-12-19 11:19:09 浏览: 3
在Java中,我们可以创建一个名为`ScoreCalculator`的接口,它有一个抽象方法`calculateAverage()`,用于表示如何计算成绩的平均值。这个接口可以用来统一处理比赛选手和学生的成绩计算逻辑。
```java
// 接口 ScoreCalculator
public interface ScoreCalculator {
double calculateAverage();
}
```
接下来,我们为`Student`和`Contestant`这两个类分别实现这个接口:
1. `Student`类:
```java
public class Student implements ScoreCalculator {
private List<Double> examScores;
public Student(List<Double> scores) {
this.examScores = scores;
}
@Override
public double calculateAverage() {
// 对于学生,直接计算所有分数的平均值
return examScores.stream().mapToDouble(Double::doubleValue).average().orElse(0);
}
}
```
2. `Contestant`类:
```java
public class Contestant implements ScoreCalculator {
private List<Double> contestScores;
public Contestant(List<Double> scores) {
this.contestScores = scores;
}
@Override
public double calculateAverage() {
// 对于比赛选手,先去掉最高分和最低分再计算平均
Collections.sort(contestScores);
double sum = contestScores.subList(1, contestScores.size() - 1).stream().mapToDouble(Double::doubleValue).sum();
return sum / (contestScores.size() - 2);
}
}
```
在这个设计中,无论是学生还是比赛选手,只要实现了`ScoreCalculator`接口,就可以通过调用`calculateAverage()`方法来获取他们的平均成绩。这样既保持了代码的复用性和通用性,也体现了多态的优势。
阅读全文