我正在完成一项家庭作业,我必须填写一个阵列并检查其中是否有四个连续的数字在上下,从一侧到另一侧或对角线。我认为我有逻辑,但我的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;
}
答案 0 :(得分:5)
// 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
就是您所需要的。
答案 1 :(得分:2)
我没有检查你的整个代码,但你的条件对我来说似乎不对。通常,您在外部for循环中检查数组的第一个维度,在内部检查第二个维度。你也应该在内循环中使用values [i] .length,因为值[1]的长度可能低于值[0]的长度。
for (int i = 0; i < values.length; i++) {
for (int j = 0; j < values[i].length; j++) {