Java 语句执行(变量更改除外)

标签 java variables nested

因此,这里的前提是检查五张“牌”的字符串数组,以查看给出的手牌类型。手牌的类型是一个整数,数字越大,手牌越好。这段特定的代码不是我写的,而是一个遇到麻烦的 friend 写的,我找不到问题所在

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 已初始化。

最佳答案

好吧,我发现了你的错误。 假设你的牌是 3 2 K 3 Q

你的 i = 0 所以 n = 1 且 p = 2
对于没有真正发生任何事情的初始循环,
所以 p 经过
在第二次执行时,当 p = 2 时,你遇到了问题
第一行是
if(手 i == 手 p) 此时手 i = 3 并且手 p = 3 但你没有 3 个同类,你只有一对。
此外,一旦 p for 循环完成且 n=2,程序将再次给出此错误,因为随后 p 将再次从 3 开始并返回您有 3 个同类,而实际上您只有一对。

我希望这会有所帮助。

我建议让每个循环都成为自己的 for 循环,而不是尝试一次完成所有循环,这样可以减少困惑,并且当您刚接触 java 时更容易做到。

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

关于Java 语句执行(变量更改除外),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22204195/

相关文章:

java - 正则表达式向前将字符串分隔成标记

string - 如何将 cmdlet 插入到 powershell 中的字符串中

javascript - AngularJS 变量作用域、JavaScript 变量作用域

elasticsearch - 如何在 Elasticsearch 中突出显示嵌套字段

css - 当文本嵌套在大约 5 个生成的 DIV 标签中时,将文本获取到 "display:inline"的简单方法?

java - 使用 if/else 语句时“无法解析符号”

java - 我不知道为什么下一条语句会在上一条语句之前执行?

css - 我的 CSS 嵌套有什么问题

java - 使用 Lombok 为具有必需和可选属性的类创建构建器

c++ - 在 OpenGL 中制作一个简单的形状移动(形状在数据结构中)