java - 为什么这返回 false

标签 java

我正在开发一个数独程序,并且我有一个 boolean 函数 在函数内部,在每个 return false 语句之前,我有一个 print 语句来显示它在哪里返回 false,对吧?好吧,我下面的代码设法返回 false,而没有在屏幕上打印任何内容,尽管它确实成功打印了 wtf、ayy、wtf 和最后的 ayy。这也没有意义,因为 ayy 位于 9 的 for 循环内...任何帮助都会很棒。

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

这怎么可能 编辑:输出: 哇哦 哎呀 哇哦 哎呀

最佳答案

问题是没有大括号的 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)

...虽然在特定情况下并不重要,但避免与 boolean 文字进行比较可以防止错误,例如:

if (someValue = false)

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

关于java - 为什么这返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55646584/

相关文章:

java - Spring Bean 战略模式

JavaMail - 用于用户注册的电子邮件身份验证

java - 为什么这个简单的 RxJava 示例无法运行?

java - 有效阻塞查询的建议

java - 无法打到Servlet页面

Java 在字符串中搜索子字符串除非前面有特定字符

java - 无法从 VisualVM 通过 JMX+SSL 进行连接

java - SWT 中的字形指标?

java - 使用 ArrayList 创建 jTable

Java 8 流 - 在流操作中使用原始流对象