除了更改变量外,Java语句执行

时间:2014-03-05 16:57:14

标签: java variables nested

所以这里的前提是检查五个“卡”的字符串数组以查看给出的那种牌。手的类型是int,其中较高的数字是更好的手。这个特殊的代码段不是由我写的,而是由一个遇到麻烦但我找不到问题的朋友写的

int checkHand(String[][] Hand) {
    boolean check = true;
    for(int i = 0; i < 4; i++) {
        if(!Hand[i][1].equals(Hand[i+1][1]))
            check = false;
    }

    //check pair starts
    for(int i = 0; i < 5; i++) {
        for(int n = i + 1; n < 5; n++) {

            if(Hand[i][0].equals(Hand[n][0])) {
                BestCard = 1;//###OUTPUTS 1 FOR A PAIR###
                temp = Hand[0];
                Hand[0] = Hand[i];
                Hand[i] = temp;
                temp = Hand[1];
                Hand[1] = Hand[n];
                Hand[n] = temp;
                //check three of a kind starts 
                for(int p = n + 1; p < 5; p++) {
                    if(Hand[i][0].equals(Hand[p][0])) {
                        temp = Hand[2];
                        Hand[2] = Hand[p];
                        Hand[p] = temp;
                        BestCard = 3; //Problem starts here- Output 3 for Three of a Kind

                        if(Hand[3][0].equals(Hand[4][0]))
                            BestCard = 6;//###OUTPUTS A 6 FOR A FULL HOUSE###
                        else if(Hand[2][0].equals(Hand[3][0])) {
                            BestCard = 7;
                        }
                        else if(Hand[2][0].equals(Hand[4][0])) {
                            temp = Hand[3];
                            Hand[3] = Hand[4];
                            Hand[4] = temp;
                            BestCard = 7;//###OUTPUTS A 7 FOR A FOUR OF A KIND###
                        }
                    } 
                }
            }
        }
    }
    if(check && BestCard<4)
        BestCard = 5;//###OUTPUTS 5 FOR A FLUSH###
    else if(check && BestCard == 4)
        BestCard = 8;//###OUTPUTS 8 FOR A STRAIGHT FLUSH###

    return BestCard;
}

当它运行时(并且还有更多内容,但这是我认为的问题区域),它可以确定所述手是否是一对或齐平。除此之外,它没有返回正确的数字。奇怪的是声明中的所有其他内容都会运行 - 如果有三种强制但未命令,则手将被重新排序为正确。四种情况也是如此。给出了BestCard值变化的评论。 int BestCard和String [] temp已经初始化。

1 个答案:

答案 0 :(得分:0)

好吧,我发现了你的错误。 让我们说你的手是3 2 K 3 Q

你的i = 0所以n = 1而p = 2
因为最初的循环没有真正发生,
所以p经历了  并且在第二次通过时,当p = 2.你遇到了问题 第一行是
if(hand i == hand p) 此时手i = 3并且手p = 3 但是你没有3种,你只需要一对 一旦p for循环结束并且n = 2,程序将再次给出此错误,因为那时p将再次从3开始并返回你有3种,当你真的只有一对时。

我希望这会有所帮助。

我建议将它们中的每一个都设置为循环,而不是尝试一次完成它们,更不用说混乱了,而且当你刚接触java时更容易做。

PS你应该改变你的最佳牌值,这样如果没有人可以通过高牌获胜。