【问题标题】:Arrays problems in JavaJava中的数组问题
【发布时间】: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写一些测试用例

标签: java arrays


【解决方案1】:

我编写了这个简单的测试,它通过了所有测试。你能提供一个它没有通过的测试吗?

int[][] a = {{7, 8, 9}, {1, 2, 3}, {4, 5, 6}};
if (!isZoneValid(0, 0, a)) throw new AssertionError("a");
int[][] b = {{-1, -1, 9}, {-1, 2, 3}, {9, 5, 6}};
if (isZoneValid(0, 0, b)) throw new AssertionError("b");
int[][] c = {{-1, -1, -1}, {-1, -1, -1}, {-1, -1, -1}};
if (!isZoneValid(0, 0, c)) throw new AssertionError("c");

【讨论】:

  • 我猜这个方法很好。我猜还有其他问题。
猜你喜欢
  • 1970-01-01
  • 2011-06-15
  • 2011-07-07
  • 2016-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多