Java奥运会跳水比赛通常有7名裁判,打分的方式为去掉一个最高分,去掉一个最低分,剩余5个成绩求得平均值,该平均值乘以3再乘以难度系数为最终成绩,请编程实现7名裁判单次跳水打分的输入,难度系数输入(难度系数通常在2~4之间),并输出有效成绩排序以及最终得分。
时间: 2024-10-11 17:14:15 浏览: 52
在Java中,我们可以创建一个简单的控制台程序来实现这个需求。首先,我们需要定义一个裁判分数结构体,然后处理输入、计算有效平均分以及排序。以下是一个基础的实现示例:
```java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
class JudgeScore {
int score;
}
public class DivingCompetition {
public static void main(String[] args) {
List<JudgeScore> scores = new ArrayList<>();
double difficultyCoefficient;
// 获取7名裁判的分数
for (int i = 0; i < 7; i++) {
System.out.println("请输入第" + (i+1) + "位裁判的分数:");
int score = Integer.parseInt(ConsoleScanner.nextLine());
scores.add(new JudgeScore() { score = score });
}
// 输入难度系数
System.out.print("请输入难度系数(2-4之间):");
difficultyCoefficient = Double.parseDouble(ConsoleScanner.nextLine());
// 打分规则:去头去尾取平均,乘以3和难度系数
double effectiveAverage = calculateEffectiveAverage(scores);
double finalScore = effectiveAverage * 3 * difficultyCoefficient;
// 排序并输出有效成绩和最终得分
Collections.sort(scores, Comparator.comparingInt(JudgeScore::score).reversed());
System.out.println("有效成绩排序:");
for (JudgeScore judge : scores.subList(1, 6)) { // 去掉最高分和最低分
System.out.println(judge.score);
}
System.out.printf("最终得分:%.2f\n", finalScore);
}
private static double calculateEffectiveAverage(List<JudgeScore> scores) {
if (scores.size() < 5) {
throw new IllegalArgumentException("至少需要5个有效分数");
}
List<Integer> validScores = new ArrayList<>(scores.subList(1, scores.size()-1));
return validScores.stream().mapToInt(Integer::intValue).average().orElse(0);
}
// 定义一个简单的ConsoleScanner类模拟用户输入
static class ConsoleScanner {
private String input;
public ConsoleScanner(String input) {
this.input = input;
}
public static String nextLine() {
return input.split("\n")[0];
}
}
}
```
在这个程序中,我们首先获取了7个裁判的分数,并通过`calculateEffectiveAverage`函数计算有效的平均分。最后,我们对有效成绩进行了降序排序,并显示了最终得分。
注意:这个示例假设所有输入都是有效的,实际应用中需要增加更多的错误检查和处理。
阅读全文