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

Java应用中玩家胜场排名功能实现问题求助

问题分析与修复方案

一、PlayerResults类的错误

1. compareTo方法参数类型不匹配

类实现的是Comparable<PlayerResults>,但compareTo方法的参数却是PickemResults,需改为PlayerResults类型。

2. int类型无法调用compareTo方法

wins是int基本数据类型,不能直接调用compareTo方法,需用Integer.compare完成数值比较。修改后的方法如下:

@Override
public int compareTo(PlayerResults another) {
    return Integer.compare(this.wins, another.wins);
}

注:你后续排序时使用了reverseOrder(),这个升序的compareTo配合反向排序,就能实现按胜场从高到低排列,逻辑是通顺的。

二、standardRanking方法的错误

1. 核心排名逻辑完全错误

原代码中i == playerList.get(group).getPlayerWins()的判断逻辑不成立——i是循环索引(0、1、2...),getPlayerWins()返回的是胜场数值(如44、42),二者没有关联,导致rank无法被正确更新。

2. printf格式化字符串参数不匹配

原代码中printf("%d %s%n", rank, playerList.get(i).getPlayerWins(), playerList.get(i).getPlayerUsername());存在参数数量不匹配问题:%d %s仅对应两个参数,但实际传入了三个(rank、胜场数、用户名),需改为%d %d %s%n。

修复后的standardRanking方法

正确逻辑是跟踪当前胜场数,遇到不同胜场时更新排名,并列玩家使用相同排名:

public static void standardRanking(List<PlayerResults> playerList) {
    if (playerList.isEmpty()) {
        return;
    }

    int rank = 1;
    int previousWins = playerList.get(0).getPlayerWins();

    // 处理第一个玩家
    System.out.printf("%d %d %s%n", rank, playerList.get(0).getPlayerWins(), playerList.get(0).getUserName());

    for (int i = 1; i < playerList.size(); i++) {
        PlayerResults current = playerList.get(i);
        if (current.getPlayerWins() != previousWins) {
            // 排名更新为当前索引+1(索引从0开始)
            rank = i + 1;
            previousWins = current.getPlayerWins();
        }
        System.out.printf("%d %d %s%n", rank, current.getPlayerWins(), current.getUserName());
    }
}

三、排序逻辑验证

你的排序代码playerList.sort(Comparator.comparing(PlayerResults::getPlayerWins, Comparator.reverseOrder()));是正确的,能实现玩家按胜场从高到低排列,配合修复后的排名方法即可得到预期输出:

1 44 Solomon
2 42 Jason
2 42 Errol
4 41 Garry
4 41 Bernard
4 41 Barry
7 39 Stephen

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 19:12:16