You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java多维数组排序求助:学生成绩数组升序排序实现

实现学生成绩的升序排序(基础数组+选择排序)

原代码的核心问题

  1. 排序逻辑完全错误:混淆了学生编号(userScores[x][0])和分数(userScores[x][1])的比较对象,导致排序条件无效。
  2. 分数计算位置不规范:userScores[i][1] = correctCount;放在内层循环中,虽不影响最终结果,但存在重复赋值的冗余。
  3. 打印语法冗余:内层循环末尾的多余分号导致循环无效,属于不必要的语法错误。

解决方案:选择排序(基础排序算法)

选择排序是最适合新手理解的基础排序方法,核心思路是每次从剩余未排序元素中找到最小项,交换到当前排序起始位置,逐步完成整体排序。针对你的需求,排序规则为:先按分数升序,分数相同时按学生编号升序。

修复后的完整代码

public class SortGrades {
    public static void main(String args[]) {
        // 学生答题情况
        char[][] answers = {
                {'A', 'B', 'A', 'C', 'C', 'D', 'E', 'E', 'A', 'D'},
                {'D', 'B', 'A', 'B', 'C', 'A', 'E', 'E', 'A', 'D'},
                {'E', 'D', 'D', 'A', 'C', 'B', 'E', 'E', 'A', 'D'},
                {'C', 'B', 'A', 'E', 'D', 'C', 'E', 'E', 'A', 'D'},
                {'A', 'B', 'D', 'C', 'C', 'D', 'E', 'E', 'A', 'D'},
                {'B', 'B', 'E', 'C', 'C', 'D', 'E', 'E', 'A', 'D'},
                {'B', 'B', 'A', 'C', 'C', 'D', 'E', 'E', 'A', 'D'},
                {'E', 'B', 'E', 'C', 'C', 'D', 'E', 'E', 'A', 'D'}};

        // 标准答案
        char[] keys = {'D', 'B', 'D', 'C', 'C', 'D', 'A', 'E', 'A', 'D'};

        // 存储学生编号(索引0)和对应分数(索引1)
        int[][] userScores = new int[8][2];

        // 计算每个学生的分数
        for (int i = 0; i < answers.length; i++) {
            int correctCount = 0;
            for (int j = 0; j < answers[i].length; j++) {
                if (answers[i][j] == keys[j]) {
                    correctCount++;
                }
            }
            // 分数计算完成后统一赋值,逻辑更清晰
            userScores[i][0] = i;
            userScores[i][1] = correctCount;
        }

        // 选择排序:按分数升序,分数相同则按学生编号升序
        for (int i = 0; i < userScores.length - 1; i++) {
            int minIndex = i; // 记录未排序部分的最小元素索引
            for (int j = i + 1; j < userScores.length; j++) {
                // 优先比较分数,分数更小则更新最小索引
                if (userScores[j][1] < userScores[minIndex][1]) {
                    minIndex = j;
                }
                // 分数相同时,比较学生编号,编号更小的排在前面
                else if (userScores[j][1] == userScores[minIndex][1] && userScores[j][0] < userScores[minIndex][0]) {
                    minIndex = j;
                }
            }
            // 交换当前起始位置和最小元素的位置
            int tempId = userScores[i][0];
            int tempScore = userScores[i][1];
            userScores[i][0] = userScores[minIndex][0];
            userScores[i][1] = userScores[minIndex][1];
            userScores[minIndex][0] = tempId;
            userScores[minIndex][1] = tempScore;
        }

        // 打印排序后的结果
        for (int[] student : userScores) {
            System.out.println("Student " + student[0] + " score is " + student[1]);
        }
    }
}

输出结果(与你的期望完全一致)

Student 3 score is 4
Student 2 score is 5
Student 1 score is 6
Student 0 score is 7
Student 5 score is 7
Student 6 score is 7
Student 7 score is 7
Student 4 score is 8

内容的提问来源于stack exchange,提问作者user23465972

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 10:03:32