【发布时间】:2011-03-25 10:52:37
【问题描述】:
我正在尝试编写一些代码来获取矩阵 9X9 和两个数字:row- 表示行数, col- 表示列数。区域是小矩阵 3X3。大矩阵包含 9 个 3X3 的小矩阵。该方法是布尔值:如果小矩阵 3X3 的单元格中不存在相等的数字,则输出 true 将由行号和列号定位。 (数字可以从 1 到 9)。
我正在使用一个布尔数组,并利用它的索引,每当我遇到一个数字时,我都会在布尔数组中更新他的索引单元格,如果我遇到两次 true,我会返回 False。 可能存在单元格为空的情况,每当发生这种情况时,单元格都包含值“-1”。 编译但不执行工作的代码。如您所见,我正在寻找 mod 3 的边界。
有人可以识别错误吗?
public static boolean isZoneValid(int row, int col, int[][] matrix) {
int fromrow = row - (row % 3);
int fromcol = col - (col % 3);
boolean[] ind = new boolean[9];
Arrays.fill(ind, false);
for (int i = fromrow; i < fromrow + 3; i++) {
for (int j = fromcol; j < fromcol + 3; j++) {
if (matrix[i][j] != -1) {
if (ind[(matrix[i][j])-1] == true) {
return false;
} else {
ind[(matrix[i][j]) - 1] = true;
}
}
}
}
return true;
}
【问题讨论】:
-
你能扩展“它不起作用”吗?
-
在我看来确实不错。你能添加导致错误输出的示例输入吗?
-
删除
Arrays.fill(ind, false);。boolean数组总是初始化为 false。 -
当你想检查第一行时 - 你在行参数中传递 0 还是传递 1?
-
添加一些调试输出以打印出前后的矩阵。也许您只是在某处混淆了行和列。用JUnit写一些测试用例