2016-11-22 63 views
-1

我的问题是,这是健全的逻辑,但执行不正确(提交服务器将不会采取它)。所以我试图检查我的5张牌是否有连续的顺序(即2,3,4,5,6等数字),然后如果第五张牌是我希望它评估为的王牌价值10所以它会像6 7 8 9 A(A为1卡值),这是我当前的代码直接在java扑克游戏

public static boolean hasStraight(Card [] cards) { 
    boolean isTrue = false; 
    for(int atPos =0; atPos<cards.length-1; atPos++){ 
     Card ogCard = cards[atPos]; 
     Card notOgCard = cards[atPos+1]; 

     if (ogCard.getValue() == (notOgCard.getValue()-1)){ 
      if ((cards[3]).getValue()==9){ 
       if (cards[4].getValue() ==1); 
       isTrue = true; //accounting for ace in last position 
      } 
      else if(ogCard.getValue() == (notOgCard.getValue()-1)){ 
       isTrue = true; //accounting for ace not in first position 
      } 
     } 

    } 
    return isTrue; 
} 

这是我至今不知道接下来会发生什么。

+0

是'cards'始终坚持“价值牌”排序? – Spotted

+0

是的,您必须先按排名排序。然后检查23456 ... 10JQKA(简单案例),然后对2345A进行特殊检查,这也是笔直的。你在哪里得到了A是10的想法超出了我。 –

回答

1

你的代码似乎走错了路。

首先你将isTrue设置为false,然后将其设置为true 任何时间数组严格按照递增顺序排列。因此,如果前两个是1,2,那么它将被解析为真。 我会在开始时将它设置为true,如果它们的数组没有按升序排列,则将其设置为false。

你的ifs结构和ifs也是......有趣的。 if ((cards[3]).getValue()==9){行很可能永远不会按照您的意愿运行,因为ogCard.getValue() == (notOgCard.getValue()-1)而不是是真实的(因此第二个if语句将永远不会运行),当ace处于最后位置时。我只是删除包装if语句,因为它没有真正测试任何有用的东西。

您描述的方法也不处理有效的ace不在最后的位置。

我的建议是这个样子:

public static boolean hasStraight(Card [] cards) { 
boolean isTrue = true; 
for(int atPos =0; atPos<cards.length-1; atPos++){ 
    Card ogCard = cards[atPos]; 
    Card notOgCard = cards[atPos+1]; 

    if (! (ogCard.getValue() == (notOgCard.getValue()-1) || (ogCard.getValue()==9&&notOgCard.getValue()==1))) { 
     isTrue=false; 
    } 

} 
return isTrue; 
}