文章目录
一、需求背景
实现一个评委打分计算系统,功能包括:
- 录入功能:接收6位评委的分数输入(0-100分)
- 统计功能:计算最高分、最低分、总分
- 结果计算:排除最高分和最低分后,计算平均分
二、代码逐段解析
1. 主程序逻辑
public static void main(String[] MakeItPossible) {
int[] scores = getJudgesScore(); // 获取评委打分
int max = getMax(scores); // 计算最高分
int min = getMin(scores); // 计算最低分
int sum = getSum(scores); // 计算总分
int avg = (sum - max - min)/(scores.length-2); // 计算平均分
}
- 流程控制:通过方法调用拆分各功能模块
- 算法公式:
[
\text{平均分} = \frac{\text{总分} - \text{最高分} - \text{最低分}}{\text{评委数} - 2}
]
2. 分数录入模块
public static int[] getJudgesScore() {
int[] scoresArray = new int[6]; // 固定6位评委
Scanner sc = new Scanner(System.in);
for(int i=0; i<scoresArray.length;) { // 无i++,通过条件控制循环
System.out.print("请第"+(i+1)+"位评委打分:");
int score = sc.nextInt();
if (score >=0 && score <=100) { // 输入验证
scoresArray[i] = score;
i++; // 仅当输入合法时递增索引
} else {
System.out.println("输入错误!分数需在0-100之间");
}
}
return scoresArray;
}
- 核心特性:
- 输入有效性检查(0-100分)
- 强制要求合法输入才能继续
- 设计亮点:
通过控制循环变量i
的自增逻辑,实现“输入错误时原地重试”。
3. 极值计算模块
最大值计算
public static int getMax(int[] arr) {
int max = arr[0]; // 假设第一个元素是最大值
for(int i=1; i<arr.length; i++) { // 从第二个元素开始比较
if(arr[i] > max) max = arr[i]; // 更新最大值
}
return max;
}
最小值计算
public static int getMin(int[] arr) {
int min = arr[0]; // 假设第一个元素是最小值
for(int i=0; i<arr.length; i++) { // 遍历所有元素
if(arr[i] < min) min = arr[i]; // 更新最小值
}
return min;
}
- 算法对比:
方法 初始假设 遍历起点 遍历方向 getMax
arr[0]
i=1 正向 getMin
arr[0]
i=0 正向
4. 总分计算模块
public static int getSum(int[] arr) {
int sum = 0;
for(int num : arr) { // 增强for循环遍历数组
sum += num; // 累加每个元素
}
return sum;
}
- 代码亮点:使用增强for循环简化遍历逻辑。
三、完整代码示例
package com.insightfuture.test;
import java.util.Scanner;
public class JudgesScore {
public static void main(String[] args) {
int[] scores = getJudgesScore();
int max = getMax(scores);
int min = getMin(scores);
int sum = getSum(scores);
int avg = (sum - max - min) / (scores.length - 2);
System.out.println("最终平均分:" + avg);
}
public static int[] getJudgesScore() {
int[] scores = new int[6];
Scanner sc = new Scanner(System.in);
for(int i=0; i<scores.length;) {
System.out.print("请第" + (i+1) + "位评委打分:");
int score = sc.nextInt();
if(score >=0 && score <=100) {
scores[i] = score;
i++;
} else {
System.out.println("分数必须在0-100之间!");
}
}
return scores;
}
public static int getMax(int[] arr) {
int max = arr[0];
for(int i=1; i<arr.length; i++) {
if(arr[i] > max) max = arr[i];
}
return max;
}
public static int getMin(int[] arr) {
int min = arr[0];
for(int num : arr) {
if(num < min) min = num;
}
return min;
}
public static int getSum(int[] arr) {
int sum = 0;
for(int num : arr) {
sum += num;
}
return sum;
}
}
四、运行示例
请第1位评委打分:85
请第2位评委打分:92
请第3位评委打分:78
请第4位评委打分:95
请第5位评委打分:88
请第6位评委打分:90
最终平均分:88
五、下篇预告:系统增强方向
在《评委打分系统实战(下)》中,我们将实现以下增强功能:
- 动态评委数量:支持自定义评委人数
- 输入增强校验:防止非数字输入导致崩溃
- 分数分布分析:统计各分数段比例
- 异常处理机制:文件保存失败时的容错处理
- 可视化界面:使用Swing开发图形化界面
预览代码片段:
// 动态评委人数
int judgeCount = sc.nextInt();
int[] scores = new int[judgeCount];
// 异常处理示例
try {
saveToFile(scores);
} catch (IOException e) {
System.out.println("文件保存失败:" + e.getMessage());
}
#Java实战 #评分系统 #数组操作 #算法基础
点击关注,及时获取下篇更新! 🔔