在歌手比赛时,只需将评委给出的分数交给设计好的流水线,就可以得到选手的最后得分,流水线上的第一个对象负责录入裁判给选手的分数,第二个对象负责去掉一个最高分和一个最低分,最后一个对象负责计算出平均成绩。 请根据下面各类的说明,用流水线完成分数评定系统: InputScore 类的对象负责录入分数,InputScore 类组合了DelScore 类的对象; DelScore 类的对象负责去掉一个最高分和一个最低分,DelScore类组合了 ComputerAver 类的对象; ComputerAver类的对象负责计算平均值; Line 类组合了InputScore、 DelScore 和 ComputerAver 3 个类的实例。 提示: 1、对象的组合: 一个类的成员变量可以是Java 允许的任何数据类型,因此一个类可以把某个对象作为自己的一个成员变量,该类的对象将其他对象作为自己的组成部分,这就是人们常说的 Has-A。 如果一个对象a组合了对象b,那么对象a就可以委托对象b调用其方法,即对象a以组合的方式复用对象b的方法。 例如: class circle{ double getArea() {…….} } class circular{ circle bottom;// 圆锥组合圆 double height; double getVolume(){ return bottom.getArea()*height/3.0 } } 2、请自行设计合理的数据。 3、注意分析程序中有可能产生的异常,根据需要进行异常捕获和处理。
时间: 2024-02-22 21:55:36 浏览: 138
根据题目要求,可以设计如下的类和流水线:
```java
class InputScore {
private List<Double> scores;
public InputScore() {
scores = new ArrayList<>();
}
public void addScore(double score) {
scores.add(score);
}
public List<Double> getScores() {
return scores;
}
}
class DelScore {
private List<Double> scores;
public DelScore(List<Double> scores) {
this.scores = scores;
}
public void delScore() {
if (scores.size() < 3) {
throw new RuntimeException("At least 3 scores are required.");
}
double maxScore = Collections.max(scores);
double minScore = Collections.min(scores);
scores.remove(maxScore);
scores.remove(minScore);
}
public List<Double> getScores() {
return scores;
}
}
class ComputerAver {
private List<Double> scores;
public ComputerAver(List<Double> scores) {
this.scores = scores;
}
public double getAverageScore() {
if (scores.isEmpty()) {
throw new RuntimeException("No scores.");
}
double sum = 0;
for (double score : scores) {
sum += score;
}
return sum / scores.size();
}
}
class Line {
private InputScore inputScore;
private DelScore delScore;
private ComputerAver computerAver;
public Line() {
inputScore = new InputScore();
delScore = new DelScore(inputScore.getScores());
computerAver = new ComputerAver(delScore.getScores());
}
public void addScore(double score) {
inputScore.addScore(score);
}
public double getAverageScore() {
delScore.delScore();
return computerAver.getAverageScore();
}
}
```
其中,`InputScore` 类负责录入分数,`DelScore` 类负责去掉一个最高分和一个最低分,`ComputerAver` 类负责计算平均值。`Line` 类组合了 `InputScore`、`DelScore` 和 `ComputerAver` 三个类的实例,用于完成分数评定系统的流水线。
使用示例如下:
```java
Line line = new Line();
line.addScore(80);
line.addScore(90);
line.addScore(95);
line.addScore(85);
double averageScore = line.getAverageScore();
System.out.println(averageScore); // 输出 88.33
```
需要注意的是,在实际应用中,还需要根据实际情况进行异常捕获和处理。
阅读全文