案例五:评委打分

  • 需求:
  • 在唱歌比赛中,有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、如何实现评委打分?

  • 定义一个动态初始化数组用于存储评委打的分数
  • 定义三个变量用于保存最高分、最低分、求和
  • 遍历数组中的每个元素,依次找出最高分、最低分、进行求和
  • 遍历结束后按照顺序规则计算出结果即可