为什么返回此错误

时间:2019-04-12 07:29:59

标签: java

我正在开发Sudoku程序,并且我具有布尔函数 在函数内部,在每次返回false语句之前,我都有一条打印语句向我展示它在哪里返回false,对吗?我下面的代码设法在不打印任何内容到屏幕的情况下返回false,尽管它确实能够打印wtf,ayy,wtf和最终的ayy。这也没有意义,因为ayy在9的for循环内... anyhelp都很棒。

if (checkBytez() == false){
    fieldsPary[a][b] = 0;
    fields[a][b] = 0;
    count++;
    System.out.println("ayy");
    if (count > 1)
        break;
    continue;
}


public boolean checkBytez() {
    byte temp = 45;
    byte[] arr;
    ArrayList<Byte> arr2 = new ArrayList<Byte>();
    for (byte i = 0; i < 9; i++) {
        System.out.println("wtf");
        temp = 0;
        arr = refillArr();
        arr2 = new ArrayList<Byte>();
        for (byte j = 0; j < 9; j++) {
            if (fields[i][j] != 0){
                temp += fields[i][j];
                arr2.add(fields[i][j]);
            }
        }
        if (arr2.size() > 0){
            for (byte b:arr)
                if (arr2.contains(b) == false){
                    temp += b;
                    System.out.println(temp - b + " +=  " + b);
                }

            if (temp != 45){
                System.out.println("false1");
                return false;
            }
        }
        else if (temp != 45){
            if (temp != 0)
                System.out.println("false2");
                return false;
        }

    }
    for (byte i = 0; i < 9; i++) {
        temp = 0;
        arr = refillArr();
        arr2 = new ArrayList<Byte>();
        for (byte j = 0; j < 9; j++) {
            if (fields[j][i] != 0){
                temp += fields[j][i];
                arr2.add(fields[j][i]);
            }
        }
        if (arr2.size() > 0){
            for (byte b:arr)
                if (arr2.contains(b) == false){
                    temp += b;
                }

            if (temp != 45){
                System.out.println("false1");
                return false;
            }
        }
        else if (temp != 45){
            if (temp != 0)
                System.out.println("false2");
                return false;
        }

    }
    return true;
}

这怎么可能 编辑:输出: 世界自然基金会 y 世界自然基金会 好吧

1 个答案:

答案 0 :(得分:11)

问题是if语句没有大括号:

if (temp != 0)
    System.out.println("false2");
    return false;

该代码等效于:

if (temp != 0) {
    System.out.println("false2");
}
return false;

始终if语句使用花括号,以避免出现这种情况。在IDE中格式化代码也会给您一些提示,因为它会超出return语句。

顺便说一句,我也建议使用:

if (!checkBytez())

代替

if (checkBytez() == false)

...虽然在 特殊情况下无关紧要,但避免与布尔文字进行比较可以防止出错,例如:

if (someValue = false)

这是有效的代码,但是执行分配而不是比较。