从纸牌游戏中的玩家的arraylist检查获胜者

时间:2016-11-16 14:18:03

标签: java conditional

我的纸牌游戏需要一种检查获胜者的方法。没有draw if语句,它可以检查获胜值。但是我觉得没有抽奖检查项目的其余部分是多余的。我该怎么做呢?

public String winChecker(){
    Player winningPlayer = players.get(0); 
    for (Player player : players) {
        if (player.getOverallHandValue() > winningPlayer.getOverallHandValue()){
            winningPlayer = player;
        }
        if (player.getOverallHandValue() == winningPlayer.getOverallHandValue()){
            return "draw!";
        }
        return winningPlayer.getName();
    }
}
//...

2 个答案:

答案 0 :(得分:1)

public String winChecker(){
    boolean many = false;
    boolean initial = true;
    Player winningPlayer = players.get(0); 
    for (Player player : players) {
        if (player.getOverallHandValue() > winningPlayer.getOverallHandValue()){
            winningPlayer = player;
            many = false;
        }
        if (player.getOverallHandValue() == winningPlayer.getOverallHandValue()){
            if (initial){
                initial = false;
            } else {
                many = true;
            }
        }

    }
    if (many) {
        return "draw";
    }
    return winningPlayer.getName();
}

是您正在寻找的。在当前的代码中有一个错误,如果结果是:

1 1 2 3 4 5

当前代码返回“draw”,这显然是错误的。看,当你试图决定哪些球员获胜时,在阅读所有球员的得分之前,你无法决定谁是胜利者

让我们用英语描述这两种算法。

  1. 将玩家列表的第0个元素设置为当前获胜者。
  2. 循环播放所有玩家
  3. 如果当前玩家的得分比目前更高,则将当前玩家设置为当前获胜。
  4. 如果他们有相同的分数,则决定是否绘制游戏。 看,在第一次迭代中,它始终是真的
  5. 和第二个算法

    1. 将玩家列表的第0个元素设置为当前获胜者。
    2. 循环播放所有玩家
    3. 如果当前玩家获得了当前获胜的分数,则将当前玩家设置为当前获胜并标记当前有一名领导者。
    4. 如果他们有相同的分数,则表示至少有两名球员处于领先状态,因此有可能进行平局。

答案 1 :(得分:-1)

正如此代码所示,您将始终返回"draw"

如果球员的收藏是这样的 ["Player A", "Player B", "Player C"]
然后这行代码
Player winningPlayer = players.get(0);
会得到你Player A 问题是,当你对玩家进行迭代时,第一次迭代也会得到你Player A 因此
if (player.getOverallHandValue() == winningPlayer.getOverallHandValue())
条件在第一次迭代中始终为真 我认为找出解决问题的方法最好留给你自己的设备。