扑克游戏直接在java

时间:2016-11-22 05:25:01

标签: java arrays poker

我的问题是这是合理的逻辑,但执行不正确(提交服务器不会接受它)。所以我试图检查我的5张牌是否有一个直线(连续顺序为2,3,4,5,6等数字)然后如果第五张牌是ace,我希望它评价为值10因此它就像6 7 8 9 A(A的卡值为1)这是我当前的代码

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;
}

这是我到目前为止还不确定下一步是什么。

1 个答案:

答案 0 :(得分:1)

您的代码似乎走错了路。

首先将isTrue设置为false,然后将其设置为true 任何时间,阵列严格按顺序递增。因此,如果前两个是1,2,它将解决为真。 我会在开头将它设置为true,然后如果它们的数组不是按顺序增加则将其设为false。

你对ifs和ifs的构造也很有趣。 if ((cards[3]).getValue()==9){行很可能永远不会按照您的意愿运行,因为ogCard.getValue() == (notOgCard.getValue()-1) 为真(因此第二个if语句永远不会运行)在最后一个位置。我会删除wrap if语句,因为它并没有真正测试任何有用的东西。

您描述的方法也不能处理不在最后位置的有效A ..

我的推荐看起来像这样:

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;
}