gpt4 book ai didi

java - 如何在 Java 中验证数独网格的有效性?

转载 作者:行者123 更新时间:2023-11-30 08:05:54 26 4
gpt4 key购买 nike

我正在尝试创建一个数独程序来检查数独网格是否有效。我想出了如何检查每一行以及每一列是否有效。但是,我无法想出代码来检查网格中的 9 个小框。下面是我试图用来检查每个小框的方法。小方框内每个空格只能出现一个数字,否则返回false。

    public static boolean isValidSquare(int[][] grid, int i, int j) {
int[][] square = new int[3][3];
int row = 0; int column = 0;
for (int x = i; x < i + 3; x++) {
for (int y = j; y < j + 3; y++) {
square[row][column] = grid[x][j];
column++;
}
row++;
}
return true;
}

但是,当我运行它时,该方法始终返回 true。我已经尝试将 for 循环中的条件分别更改为 i + 2 和 j + 2,它仍然给我同样的问题。

还是跟这段抛给方法的代码有关?

    for (int i = 0; i < grid.length; i += 3) {
for (int j = 0; j < grid[i].length; j += 3) {
if (isValidSquare(grid, i, j) == false)
return false;
}
}

更新:刚刚测试过哪些方法有效,程序甚至没有到达 ValidSquare 部分,Column 部分是返回 false 的方法:

    public static boolean isValidColumn(int[][] grid, int i) {
for (int j = 0; j < grid[0].length - 1; j++) {
for (int k = j; k < grid.length; k++) {
if ((grid[j][i] < 1 || grid[j][i] > 9) || grid[j][i] == grid[k][i])
return false;
}
}
return true;

我无法弄清楚是什么导致它不断地声明为假,我打印并检查了每一列,我觉得它看起来很好。

编辑 2:好的,第一列只是因为我将 k = 设置为 j,而不是 j + 1。subsquare 方法的另一个问题仍然困扰着我,因为它在“3”处抛出 OutOfBoundsException

最佳答案

您的代码中有错别字:

public static boolean isValidSquare(int[][] grid, int i, int j) {
int[][] square = new int[3][3];
int row = 0; int column = 0;
for (int x = i; x < i + 3; x++) {
for (int y = j; y < j + 3; y++) {
square[row][column] = grid[x][j]; // j should be y
column++;
}
row++;
}
return true;
}

我猜这就是它未按预期执行的原因。

此外,正如其他人所说,您的方法永远不会返回 false,它也不会正常工作,但这是很明显的。

我建议通过将其内容写入集合并在方法 yourSet.add(number) 返回 false 时返回 false 来验证小盒子的有效性

关于java - 如何在 Java 中验证数独网格的有效性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34733460/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com