我正在开发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 世界自然基金会 好吧
答案 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)
这是有效的代码,但是执行分配而不是比较。