2016-11-16 63 views
1

我的纸牌游戏需要一种方法来检查赢家。如果没有绘制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(); 
    } 
} 
//... 
+1

究竟是什么问题? – XtremeBaumer

+0

其中之一,你只想在你穿过所有球员并确定没有一名球员有优越的手牌时宣布平局。现在你的方法并不保证检查全部。 – Himself12794

+0

@godhar目前还不清楚你要问什么,更详细地描述问题。这种方法是有缺陷的,在任何Java特定的逻辑有缺陷之前。考虑使用伪代码来描述应该发生的事情。 – Thihara

回答

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 

当前的代码返回“画”,这显然是错误的。看看,当你试图决定哪些玩家获胜时,在阅读所有玩家的分数之前,你不能决定谁是赢家

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

  1. 将玩家列表的第0个元素设置为当前赢家。
  2. 通过所有玩家循环
  3. 如果当前玩家在当前获胜时有更好的得分,则将当前玩家设置为当前获胜。
  4. 如果他们有相同的分数,决定游戏画出来。 看,在第一次迭代时,它总是真的

和第二算法

  1. 设置的玩家列表,当前赢家0个元素。
  2. 通过所有玩家循环
  3. 如果当前玩家目前获胜的分数更高,则将当前玩家设置为当前获胜并标记此刻有单个领导者。
  4. 如果他们的得分相同,则表示至少有两名选手在领先,因此有可能获得平局。
+0

谢谢@xenteros,您在声明事情之前完成所有检查的绝对正确。再次感谢所有的输入。 – godhar

+0

@godhar如果我解决了您的问题,请将其标记为解决方案 – xenteros

+0

问题远未解决。感谢您的输入。 – godhar

-1

由于此代码的立场,你将永远得到"draw"返回。

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

+0

我想过了。似乎要走的路是嵌套循环,检查每个元素与每个元素,并将重复添加到另一个'抽屉数组'。虽然不能让它工作! – godhar