已知有3个班级各5名学员,请使用二维数组动态录入所有学员成绩

(没实现,但是花了好久)3. 已知有3个班级各5名学员,请使用二维数组动态录入所有学员成绩,并计算各个班级的平均成绩,最好成绩和最差成绩。依次输出平均成绩最好的班,三个班所有学员中成绩最高的分数,最差的分数

如果有大佬指点下,这个可能循环太多导致性能比较差,但是目前只学到这么多,用目前出现的方法实现下。

太烧脑了。


private static void fun6() {

        // 本来是需要控制台输入,现在手动定义一个数组

        int[][] a = new int[3][];
        a[0] = new int[]{1,1,1,1,1};
        a[1] = new int[]{2,2,2,2,2};
        a[2] = new int[]{1,1,1,1,1};

        /*
        * 3. 已知有3个班级各5名学员,请使用二维数组动态录入所有学员成绩,
        * 并计算各个班级的平均成绩,最好成绩和最差成绩。依次输出平均成绩最好的班,
        * 三个班所有学员中成绩最高的分数,最差的分数
        * */
        Scanner sc = new Scanner(System.in);
        // 输入成绩
//        int[][] a = new int[3][5];
//        for (int i = 0; i < 3; i++) {
//            System.out.println("请输入第 " + (i+1) + " 个班级的:");
//            for (int j = 0; j < 5; j++) {
//                System.out.print("请输入第 " + (j+1) + " 个学员的成绩:");
//                a[i][j] = sc.nextInt();
//            }
//        }

        // 打印
        // 每个班级:
        // 按照平均分从大到小依次输出每个班级的信息,解决方法为:
        //      再定义一个二维数组存放已经计算出来的数据(在计算的循环中可以同时存放),
        //      对于新数组进行嵌套 for 循环,找到平均数为最大的进行输出。
        //      然后再输出 比上一个记录的数值小的 最大的平均值 进行输出,以此类推。
        double[][] b = new double[3][4];
        // 先计算各个数值。
        for (int i = 0; i < 3; i++) {
            double sum = 0;
            double max = 0;
            double min = Double.MAX_VALUE;
            for (int j = 0; j < 5; j++) {
                sum += a[i][j];
                if (max<a[i][j]){
                    max = a[i][j];
                }
                if(min>a[i][j]){
                    min = a[i][j];
                }
            }
            b[i][0] = i;
            b[i][1] = (sum/5);
            b[i][2] = max;
            b[i][3] = min;
        }
        // 按照平均成绩的大小依次输出
        double max = 0;
        double beforeMax = Double.MAX_VALUE;
        for (int i = 0; i < 3; i++) {
/*            for (int j = 0; j <4 ; j++) {
                if(j == 2 && max < b[i][j] && max < beforeMax){
                    max = b[i][j];
                    beforeMax = max;
                }
            }*/
            for (int j = 0; j < 3; j++) {
                if (max < b[j][1] && max < beforeMax) {
                    max = b[j][1];
                }
            }
            beforeMax = max;
            for (int j = 0; j < 3; j++) {
                if (b[j][1] == max) {
                    System.out.printf("排名第 %d 的班级的 平均分为:%f,最高分为:%f,最低分为:%f%n", (j + 1), b[j][1], b[j][2], b[j][3]);
                }
                break;
            }
        }



        // 三个班级里面成绩最高的分数,成绩最差的分数
        int maxAll = 0;
        int minAll = Integer.MAX_VALUE;
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 5; j++) {
                if (maxAll < a[i][j]){
                    maxAll = a[i][j];
                }
                if (minAll > a[i][j]){
                    minAll = a[i][j];
                }
            }
        }
        System.out.printf("所有成绩中最高分为:%d,最低分为:%d", maxAll, minAll);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值