当前位置: 首页 > 知识库问答 >
问题:

根据得分找到赢家、输家和平手

盛柏
2023-03-14

给定一个玩家列表,我试图确定哪个玩家得分最高(获胜者),哪个玩家打成平手(如果有的话),然后推断剩下的玩家是一场比赛的失败者。

我尝试实现了一个球员比较器,根据得分从高到低对每个球员进行排序。当然,这将有助于找到赢家和输家。但我不知道从这里到哪里去。

我的第一个想法是迭代玩家列表,并做某种冒泡排序算法,但老实说,我不知道。我也在考虑一些递归函数。

到目前为止,我在endGame()函数中得到了以下内容:

    private void endGame(){
        this.gameRunning = false;
        List<WAMPlayer> scoreTable = new ArrayList<>(this.players.keySet());
        WAMPlayer winner;
        List<WAMPlayer> tiedPlayers = new ArrayList<>();
        List<WAMPlayer> losers = new ArrayList<>();
        scoreTable.sort(new PlayerScoreComparator());
        for (int i = 0 ; i < scoreTable.size(); i++){
            if (i == scoreTable.size() - 1){
                losers.add(scoreTable.get(i));
                break;
            }

            if (scoreTable.get(i).getScore() == scoreTable.get(i + 1).getScore()){
                for (int j = i + 1; j < scoreTable.size(); j++){

                }
            }
            /*
            Need to set the winner and tied players somewhere here...

             */
        }
    }

下面是两个给定播放器列表的输出的示例:Player1、Player2、Player3和Player4。选手按分数排序。

例一:播放器1:5,播放器2:4,播放器3:4,播放器4:3

(对不起玩家4)

共有1个答案

韦修文
2023-03-14

我们可以使用收集器#groupingby和streams将每个玩家按分数分组。

LinkedHashMap<Integer, List<Player>> mappedScores = set.stream().collect(
                                              Collectors.groupingBy(Player::getScore,
                                              LinkedHashMap::new, //preserve order
                                              Collectors.toList()));

每个分数值都有自己的键和拥有该分数的玩家的列表值。在纽带的情况下,该键的列表值将包含超过1的播放器。

然后,我们可以使用一个简单的for循环在地图上枚举,并确定哪些玩家在哪个位置,哪些玩家打成平手。这是假设较高的分数产生较低的位置。

int position = 1; // Keep track of each player's position
for(Map.Entry<Integer, List<Player>> entry : mappedScores.entrySet())
{
  if(entry.getValue().size() > 1) // More than one player has this score, so tie
    System.out.println(entry.getValue().size() + " players tied for position " + position);
  else // Only one player has this score
    System.out.println(entry.getValue().get(0).getName() + " achieved position " + position);
  position++; // To the next position
}
 类似资料:
  • 对角线从右到左 在这里,支票中奖者代码结束。

  • 考虑下面这个游戏。有一组正数。每个玩家依次移除一个切片(连续的元素序列),这样它的和就是偶数。输的玩家是不能移动的玩家。对于< code>[4,5,3,7,2]示例,获胜策略(对于第一个玩家)是移除< code>[5,3]切片。您需要确定第一个玩家是否有赢棋(如果有,返回< code>slice_start和< code>slice_end索引)。 时间/空间复杂度:< code>O(n) 我想到

  • 我有一副牌洗牌和返回结果,但现在我想根据用户输入更改输出:玩家数量和每个玩家的纸牌数量。 原始代码: CardRun-main 甲板级 卡片类 纸牌输出甲板:54 玩家数量:4(由用户输入) 每个用户的纸牌数量:5(由用户输入) 玩家1:黑桃A,红心2,红小丑 玩家2:红心8,梅花10,红心9 玩家1手牌更好。

  • 在网上申请的职位,大约等了小半个月通知去面试,在这之前已经放弃了,哈哈,以为简历筛选没有通过,面试当天迟到了一分钟,还好没有开始。面试开始前,有个笔试,大概30分钟的样子,面试的过程是二对一,HR和部门主管还是经理的面试我。首先是一个简短的自我介绍,接着,hr和领导针对之前的工作经验提问,问题很多,轮流式的提问,几乎没有思考的机会,问题也很刁钻,我根据自己之前的工作经验也算是侃侃而谈,大约谈了半个

  • 温馨提示:该项目已开放源码,除商业用途外,用户可以自由使用,但需要保留原项目版权说明。详细说明:https://license.ecjia.com/ ECJia到家 开发语言:PHP 数据库:MySQL 开发框架:ecjia 模板引擎:smarty 简介 EC+(ecjia)到家是一款可开展O2O业务的移动电商系统。它包含:移动端APP,采用原生模式开发,覆盖使用iOS及Android系统的移动终

  • 问题内容: 我正在制作一个2D游戏,其中包括一架与飞船通过槽式导弹作战的飞机,我希望飞船根据玩家的位置旋转,以便它们始终以“头部”面对玩家。播放器可以在y和x方向上自由移动。玩家和太空飞船具有一个Vector2 pos变量,该变量对应于它们的实际位置。任何帮助,将不胜感激。 这是我(现在正在工作)的代码: 敌方飞船旋转,但它们并不总是面对玩家: 问题答案: @dwn的答案在数学上是正确的,但是当您