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

如何基于分数对备选方案排名并输出名称与排名(Java示例)

方案排名实现(含同分处理)

这问题我熟,要实现根据分数给备选方案排名,核心是不能把名称和分数分开处理,否则排序后对应关系会乱。下面给你完整的可运行代码,包含同分并列排名的逻辑:

完整代码实现

import java.util.Arrays;
import java.util.Comparator;

public class Ranking {
    // 用Record绑定方案名称和分数(Java 16+支持,简洁高效)
    record Alternative(String name, double score) {}

    public static void main(String[] args) {
        // 备选方案的分数
        double[] score = {6.75, 9.0, 6.75, 5.50};
        // 备选方案的名称(补全你没写完的部分)
        String[] name = {"a1", "a2", "a3", "a4"};

        // 1. 将名称和分数绑定成对象数组,避免排序后对应关系丢失
        Alternative[] alternatives = new Alternative[name.length];
        for (int i = 0; i < name.length; i++) {
            alternatives[i] = new Alternative(name[i], score[i]);
        }

        // 2. 按分数降序排序,分数高的排前面
        Arrays.sort(alternatives, Comparator.comparingDouble(Alternative::score).reversed());

        // 3. 计算排名并打印(处理同分并列)
        System.out.println("排名\t方案名称\t分数");
        int currentRank = 1;
        double previousScore = alternatives[0].score();
        
        for (int i = 0; i < alternatives.length; i++) {
            Alternative alt = alternatives[i];
            // 处理分数不同的情况:更新排名为当前索引+1(索引从0开始)
            if (Math.abs(alt.score() - previousScore) > 1e-9) {
                currentRank = i + 1;
                previousScore = alt.score();
            }
            // 格式化输出
            System.out.printf("%d\t%s\t%.2f%n", currentRank, alt.name(), alt.score());
        }
    }
}

代码解释

  1. 数据绑定:用Alternative这个Record把名称和分数绑定在一起,确保排序时两者不会分离。如果你的Java版本低于16,可以换成普通类(带getter的那种):
static class Alternative {
    private final String name;
    private final double score;

    public Alternative(String name, double score) {
        this.name = name;
        this.score = score;
    }

    public String getName() { return name; }
    public double getScore() { return score; }
}

此时排序代码要改成:Arrays.sort(alternatives, Comparator.comparingDouble(Alternative::getScore).reversed());

  1. 排序逻辑:用Arrays.sort结合Comparator实现分数降序排列,确保高分方案优先。

  2. 同分排名处理:

    • 初始化当前排名为1,记录第一个方案的分数
    • 遍历排序后的数组,若当前方案分数和上一个不同(用Math.abs避免浮点数精度误差),则更新排名为当前索引+1
    • 同分的方案会保持相同排名,比如示例中a1和a3都会显示排名2,下一个方案直接跳至排名4,这是标准的竞赛排名规则。

运行输出

排名	方案名称	分数
1	a2	9.00
2	a1	6.75
2	a3	6.75
4	a4	5.50

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:36:51