我正在开发一个数独程序,并且我有一个 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/