文章目录
- 一、需求背景
- 二、代码逐段解析
- 1. 主程序逻辑
- 2. 分数录入模块
- 3. 极值计算模块
- 最大值计算
- 最小值计算
- 4. 总分计算模块
- 三、完整代码示例
- 四、运行示例
- 五、下篇预告:系统增强方向
一、需求背景
实现一个评委打分计算系统,功能包括:
- 录入功能:接收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实战 #评分系统 #数组操作 #算法基础
点击关注,及时获取下篇更新! 🔔