我正在做一项家庭作业,我必须填写一个数组,并检查数组中是否有四个连续的数字上下、左右或对角线。我想我的逻辑是错误的,但我的 for 循环在第一次迭代时停止,而不是搜索数组。感谢您的帮助。
public static boolean isConsecutiveFour(int[][] values) {
int One = 0;
for (int i = 0; i < values[0].length; i++) {
for (int j = 0; j < values.length; j++) {
One = values[i][j];
//System.out.println(One);
// up and down
if (values[i + 1][j] == One) {
if (values[i + 2][j] == One) {
if (values[i + 3][j] == One) {
return true;
}
}
}
// left to right
if (values[i][j + 1] == One) {
if (values[i][j + 2] == One) {
if (values[i][j + 3] == One) {
return true;
}
}
}
// diagonal to right
if (values[i + 1][j + 1] == One) {
if (values[i + 2][j + 2] == One) {
if (values[i + 3][j + 3] == One) {
return true;
}
}
}
// diagonal to left
if (i >= 3 && j >=3) {
if (values[i - 1][j - 1] == One) {
if (values[i - 2][j - 2] == One) {
if (values[i - 3][j - 3] == One) {
return true;
}
}
}
} else
return false;
}
}
return false;
}
最佳答案
// diagonal to left
if (i >= 3 && j >=3) {
if (values[i - 1][j - 1] == One) {
if (values[i - 2][j - 2] == One) {
if (values[i - 3][j - 3] == One) {
return true;
}
}
}
} else
return false;
问题是如果最后一个 if
语句失败,else
子句将触发并返回 false
。仅仅因为一项特定的检查失败就返回这里还为时过早。
去掉 else
子句。在所有循环迭代运行之前,您不想返回 false
。函数末尾的最终 return false
就是您所需要的。
关于Java for循环不迭代,在一次迭代后停止方法而不是重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41593940/