Java开发小项目--评委打分系统

今天我做的小项目是评委计分系统,让我们去看看需求。在歌唱比赛中,有6名评委评分,分数是整数,其区间是【0-100】,去掉最大值和最小值,其余的数相加然后求平均值,最终作为最后的分数。好,让我们开始吧。

public static int[] getScores(){
        //定义数组,动态数组
        int[] scores =new int[6] ;
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < scores.length;i++) {
            System.out.println("请输入评委打分");
            int score = sc.nextInt();
            if (score  >= 0 && score <= 100) {
                scores[i] = score;
            }else {
                System.out.println("成绩超出了范围,继续录入,当前的i为:" + i);
            }
        }
        return scores;
    }

首先,我们要定义一个动态数组用以储存数据,然后键盘输入,用if语句体来判断不符合要求的数据,如图所示。

但如果我输入的值超过一百怎么办,这时我运行程序,程序结果出来的却是一堆零,也就是默认值,即使我打错了一个,也要重新运行程序输入,很麻烦,怎么办?

 public static int[] getScores(){
        //定义数组,动态数组
        int[] scores =new int[6] ;
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < scores.length;) {
            System.out.println("请输入评委打分");
            int score = sc.nextInt();
            if (score  >= 0 && score <= 100) {
                scores[i] = score;
                //这里把条件控制语句放到if语句体
                /*
                如果不放,你输入的值为120,值不符合条件但还是会走一遍条件控制语句,这时i的值为1,会跳过0就代表着会重新让你输入一次
                如果放到语句体里面,则不符合条件就不会跳过0,会一直让你再输入一次,直到输入符合条件为止
                 */
                i++;
            }else {
                System.out.println("成绩超出了范围,继续录入,当前的i为:" + i);
            }
        }
        return scores;
    }

我把循环的条件控制语句放到了if语句体里面。如果不放,你输入的值为120,值不符合条件但还是会走一遍条件控制语句,这时i的值为1,会跳过0,就代表着不会重新让你输入一次,需要重新启动程序。如果放到语句体里面,则不符合条件就不会跳过0,会一直让你再输入一次,直到输入符合条件为止。

之后,我们就去获取数组里面的最大值和最小值。

//2.定义方法求最大值
    public static int getMax(int[] scoreArr){
        int max = scoreArr[0];
        for (int i = 1; i < scoreArr.length; i++) {
            if (scoreArr[i] > max){
                max = scoreArr[i];
            }
        }
        return max;
    }

    //2.定义方法求最小值
    public static int getMin(int[] scoreArr){
        int min = scoreArr[0];
        for (int i = 1; i < scoreArr.length; i++) {
            if (scoreArr[i] < min){
                min = scoreArr[i];
            }
        }
        return min;
    }

用变量max和min来接受最大值和最小值,然后用return关键字返回。

 public static int getSum(int[] scoreArr){
        int sum = 0;
        for (int i = 0; i < scoreArr.length; i++) {
            sum = sum + scoreArr[i];
        }
        return sum;
    }

随后再定义一个方法去求和,我们最终的算法思想是,通过运用总和减去最大最小值,最后求平均值。

import java.util.Scanner;

public class Demo5 {
    public static void main(String[] args) {
        //在歌唱比赛中,有六名评委打分,分数范围是【0-100】之间的整数。
        //选手的最后得分为:去掉最高分、最低分后的四个评委的平均分,计算得分
        int[] scoreArr = getScores();
        for (int i = 0; i < scoreArr.length; i++) {
            System.out.println(scoreArr[i]);
        }
        int max = getMax(scoreArr);
        int min = getMin(scoreArr);
        int sum = getSum(scoreArr);
        //(总和 - 最大值 - 最小值)/ 4
        //这里不写死的原因是以后数组长度改变时,这一条代码不变,是灵活的
        int avg = (sum - max - min) / (scoreArr.length - 2);
        //打印结果
        System.out.println("选手最终得分为:" + avg);
    }

遍历数组,调用方法来计算,但计算有个小点要注意,我把本应该除以4的4改为数组的长度,这是因为为了提升代码的灵活性,无论数组长度如何改,这条代码都会随着数组的改变而改变。

最终结果如下。

如果有小伙伴有更好的解决方法,欢迎来指教,本代码仅供参考。

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值