我的纸牌游戏需要一种检查获胜者的方法。没有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();
}
}
//...
答案 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 :(得分:-1)
正如此代码所示,您将始终返回"draw"
。
如果球员的收藏是这样的
["Player A", "Player B", "Player C"]
然后这行代码
Player winningPlayer = players.get(0);
会得到你Player A
问题是,当你对玩家进行迭代时,第一次迭代也会得到你Player A
因此
if (player.getOverallHandValue() == winningPlayer.getOverallHandValue())
条件在第一次迭代中始终为真
我认为找出解决问题的方法最好留给你自己的设备。