案例五:评委打分
- 需求:
- 在唱歌比赛中,有6名评委给选手打分,分数范围是 [0-100] 之间的整数。选手的最后得分为:去掉一个最高分、一个最低分后的4个评委的平均分,请完成上述过程并计算出选手的得分。
- 分析:
- 将6名评委的打分录入到数组中
- 遍历数组中的分数,依次取出累加求和,找出最高分、最低分将其减去。
思路:
(1) 最高分:参照我们之前练过的选美案例——>求最高颜值
(2) 最低分:参数我们之前练过的选美案例,改成选丑——>求最低颜值 - 按照分数的计算规则算出平均分:
- 平均分 = (总分 - 最高分 - 最低分) / (数组长度-2——>相等于是剩下的评委人数)
- 实现:
1. 动态初始化一个数组scoresArr,长度为6
2. 创建一个键盘录入对象,用于评委打分
3. 定义一个for循环,循环6次,进行6次打分,每次打分后,将分数录入到scoresArr
4. 定义一个求平均分的方法averScore,返回值类型是double,设置一个形参:int[] arr ——>用于接收传入的数组
5. 在averScore内:
(5.1) 定义个用于记录最高分的变量,建议存储数组中第一个元素作为参照
(5.2) 定义个用于记录最低分的变量,建议存储数组中第一个元素作为参照
(5.3) 定义个用于分数求和的变量,初始值为0
(5.4) 定义一个for循环,遍历接收到的数组:
使用if判断:当遍历到的数据 大于 记录最高分时,则替换最高分
使用if判断:当遍历到的数据 小于 记录最低分时,则替换最低分
统计总分:每遍历到一个数据,用分数求和的变量值累加起来
(5.5) 循环结束后,计算平均分:
平均分 = (总分 - 最高分 - 最低分) / (数组长度-2)
结果想要保留小数:(总分 - 最高分 - 最低分) * 1.0 / (数组长度-2)
(5.6) 返回选手最终得分
6. 调用averScore方法,将录入分数后的数组传递给形参 int[] arr 并用变量接收
7. 输出选手最终得分
package com.app.demo;
import java.util.Scanner;
/**
案例五:评委打分
- 需求:
- 在唱歌比赛中,有6名评委给选手打分,分数范围是 [0-100] 之间的整数。
选手的最后得分为:去掉一个最高分、一个最低分后的4个评委的平均分,请完成上述过程并计算出选手的得分。
- 分析:
- 将6名评委的打分录入到数组中
- 遍历数组中的分数,依次取出累加求和,找出最高分、最低分将其减去。
思路:
(1) 最高分:参照我们之前练过的选美案例——>求最高颜值
(2) 最低分:参数我们之前练过的选美案例,改成选丑——>求最低颜值
- 按照分数的计算规则算出平均分:
平均分 = (总分 - 最高分 - 最低分) / (数组长度-2——>相等于是剩下的评委人数)
*/
public class Test5 {
public static void main(String[] args) {
// 1. 动态初始化一个数组scoresArr,长度为6
int[] scoresArr = new int[6];
// 2. 创建一个键盘录入对象,用于评委打分
Scanner sc = new Scanner(System.in);
// 3. 定义一个for循环,循环6次,
for (int i = 0; i < 6; i++) {
// i = 0 1 2 3 4 5 ——>6次
// 进行6次打分,
System.out.println("请第" + (i + 1) + "位评委打分: ");
int score = sc.nextInt();
// 每次打分后,将分数录入到scoresArr
scoresArr[i] = score;
}
// 6. 调用averScore方法,将录入分数后的数组传递给形参 int[] arr 并用变量接收
double result = averScore(scoresArr);
// 7. 输出选手最终得分
System.out.println("选手的最终得分是: " + result);
}
// 4. 定义一个求平均分的方法averScore,返回值类型是double,设置一个形参:int[] arr ——>用于接收传入的数组
public static double averScore(int[] arr) {
// 5. 在averScore内:
// (5.1) 定义个用于记录最高分的变量,建议存储数组中第一个元素作为参照
int max = arr[0];
// (5.2) 定义个用于记录最低分的变量,建议存储数组中第一个元素作为参照
int min = arr[0];
// (5.3) 定义个用于分数求和的变量,初始值为0
int sum = 0;
// (5.4) 定义一个for循环,遍历接收到的数组:
for (int i = 0; i < arr.length; i++) {
// 使用if判断:当遍历到的数据 大于 记录最高分时,则替换最高分
if (arr[i] > max) {
max = arr[i];
}
// 使用if判断:当遍历到的数据 小于 记录最低分时,则替换最低分
if (arr[i] < min) {
min = arr[i];
}
// 统计总分:每遍历到一个数据,用分数求和的变量值累加起来
sum += arr[i];
}
System.out.println("最高分是: " + max);
System.out.println("最低分是: " + min);
// (5.5) 循环结束后,计算平均分:
// 平均分 = (总分 - 最高分 - 最低分) / (数组长度-2)
// 结果想要保留小数:(总分 - 最高分 - 最低分) * 1.0 / (数组长度-2)
double result = (sum - max - min) * 1.0/ (arr.length-2);
// (5.6) 返回选手最终得分
return result;
}
}
输出结果:
请第1位评委打分:
88
请第2位评委打分:
77
请第3位评委打分:
9
请第4位评委打分:
99
请第5位评委打分:
66
请第6位评委打分:
56
最高分是: 99
最低分是: 9
选手的最终得分是: 71.75
总结
1、如何实现评委打分?
- 定义一个动态初始化数组用于存储评委打的分数
- 定义三个变量用于保存最高分、最低分、求和
- 遍历数组中的每个元素,依次找出最高分、最低分、进行求和
- 遍历结束后按照顺序规则计算出结果即可