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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 18:42:30