从纸牌游戏的玩家数组列表中检查赢家



我的纸牌游戏需要一个方法来检查获胜者。没有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();
    }
}
//...
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();
}

就是你要找的。在当前的代码中有一个bug,如果结果是:

1 1 2 3 4 5

当前代码返回"draw",这显然是错误的。看,当你试图决定谁赢了,你不能决定谁是赢家在读取所有玩家的分数

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

  1. 将玩家列表中的第0个元素设置为当前赢家。
  2. 遍历所有玩家
  3. 如果当前玩家的分数高于当前获胜,则将当前玩家设置为当前获胜。
  4. 如果他们有相同的分数,决定游戏平局。看,在第一次迭代时它总是为真!

和第二个算法

  1. 将玩家列表中的第0个元素设置为当前赢家。
  2. 遍历所有玩家
  3. 如果当前玩家的分数高于当前获胜,则将当前玩家设置为当前获胜并标记当前只有一个领导者。
  4. 如果他们有相同的分数,标记至少有两名球员领先,这样就有可能打平。

根据此代码,您将始终返回"draw"

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

最新更新