Java多维数组排序求助:学生成绩数组升序排序实现
实现学生成绩的升序排序(基础数组+选择排序)
原代码的核心问题
- 排序逻辑完全错误:混淆了学生编号(
userScores[x][0])和分数(userScores[x][1])的比较对象,导致排序条件无效。 - 分数计算位置不规范:
userScores[i][1] = correctCount;放在内层循环中,虽不影响最终结果,但存在重复赋值的冗余。 - 打印语法冗余:内层循环末尾的多余分号导致循环无效,属于不必要的语法错误。
解决方案:选择排序(基础排序算法)
选择排序是最适合新手理解的基础排序方法,核心思路是每次从剩余未排序元素中找到最小项,交换到当前排序起始位置,逐步完成整体排序。针对你的需求,排序规则为:先按分数升序,分数相同时按学生编号升序。
修复后的完整代码
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
相关产品推荐
相关产品推荐

