Java中不使用Arrays.sort实现按分数降序排序时姓名与分数不匹配的问题求助
问题分析与修复方案
嘿,我一眼就发现问题所在啦!
问题根源
你写的排序逻辑只处理了score数组的元素交换,但完全没同步交换对应的name数组元素。当你把高分移到数组前面时,对应的姓名还留在原来的位置,直接导致分数和姓名彻底错位,这就是输出结果不对的核心原因。
举个例子:示例输入里k8的分数是99,排序后99被放到了score[0]的位置,但name[0]还是最初输入的k1,所以就出现了k1 99的错误输出。
修复后的代码
只需要在交换分数的同时,同步交换对应的姓名即可。我们新增一个临时字符串变量来存储姓名,完成同步交换:
package test; import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String [] name = new String[10]; int [] score = new int [10]; int tempScore = 0; String tempName; // 新增临时变量存储姓名,用于同步交换 // 输入10个用户的姓名和分数 for (int i = 0; i < 10; i++) { System.out.println("\nNumber " + (i+1)); System.out.print("Input your name: "); name[i] = sc.next(); System.out.print("Input your score: "); score[i] = sc.nextInt(); } // 降序排序,同步交换姓名和分数 for (int i = 0; i < score.length; i++) { for (int j = i+1; j < score.length; j++) { if(score[i] < score[j]) { // 交换分数 tempScore = score[i]; score[i] = score[j]; score[j] = tempScore; // 同步交换对应的姓名 tempName = name[i]; name[i] = name[j]; name[j] = tempName; } } } System.out.println(); // 输出前三名 System.out.println("前三名成绩如下:"); for (int i = 0; i < 3; i++) { System.out.println(name[i] + " " + score[i]); } sc.close(); // 记得关闭Scanner资源 } }
测试验证
用你给出的示例输入:
k1 96 k2 92 k3 94 k4 98 k5 91 k6 95 k7 90 k8 99 k9 93 k10 97
运行后会得到你期望的正确输出:
k8 99 k4 98 k10 97
小建议
以后处理这种有对应关系的数组(比如姓名和分数一一绑定)时,一定要记得同步交换所有关联元素。或者你也可以用自定义类来封装姓名和分数,排序时直接对类对象排序,代码逻辑会更清晰哦~
内容的提问来源于stack exchange,提问作者xKD
相关产品推荐
相关产品推荐

