递归数独让我越界错误 - Java

Sudoku by recursion gives me out of bound error - Java

我正在使用递归在 Java 中制作数独求解器。

public boolean fsolve(int i, int j){
  if (j >= this.SIZE){
      i++;
      if (i>=this.SIZE){
          return true;
      }
  }
  if (!this.isEmpty(i,j)){
      return fsolve(i,j+1);
  }
  for (int curval = 1; curval < 10; curval++){
      if ((this.tryValue(curval, i, j)) && (this.fsolve(i, j+1))){
          return true;
      }
  }
  this.clear(i, j);
  return false;
  }

这是我的求解函数。

tryValue 函数在位置 i,j 处尝试一条曲线。

clear 函数将位置 i,j 的值设置为 0。

整个数独被加载到一个名为 model[][] 的 int 中,我已经创建了检查行、列和框的函数。它们都按预期工作。

我的求解函数抛出了越界错误,我不知所措。我不确定现在该走哪条路,因为我相信我的功能会起作用。

它是这样写的:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9
    at Field.isEmpty(Field.java:99)
    at Field.fsolve(Field.java:161)
    at Field.fsolve(Field.java:165)
    at Field.fsolve(Field.java:165)
    at Field.fsolve(Field.java:162)
    at Field.fsolve(Field.java:165)
    at Field.fsolve(Field.java:165)
    at Field.fsolve(Field.java:162)
    at Field.fsolve(Field.java:162)
    at Field.fsolve(Field.java:165)
    at Field.fsolve(Field.java:165)
    at Sudoku.main(Sudoku.java:6)

我的求解函数从第 152 行开始。

我的 isEmpty 函数如下所示:

  public boolean isEmpty(int i, int j) {
  if (this.model[i][j] == 0){
      return true;
  }
  return false;
}

这是我的 tryValue 函数:

public boolean tryValue(int val, int i, int j) {
if (!checkRow(val, i)) {
  return false;
}
if (!checkCol(val, j)) {
  return false;
}
if (!checkBox(val, i, j)) {
  return false;
}
this.model[i][j] = val;
return true;
}

现在,它似乎根本没有改变模型[][]。当我初始化 this class 时,我首先在 model[][] 中各处放置一个 0,然后导入一个包含有效数独值的文件。这部分到目前为止有效。当我现在 运行 它时,好像 fsolve 函数什么也没做。

这是我导入文件后的样子,但是在fsolve函数之后是一样的。

如果j>=this.SIZE,但是i<this.SIZE,你仍然调用isEmpty(i,j),其中j大概是越界的。 (我认为你需要在撞到 i 时更改 j。)

public boolean fsolve(int i, int j){
  if (j >= this.SIZE){
      i++;
      j = 0;
      if (i>=this.SIZE){
          return true;
      }
  }

假设您使用的是二维网格,您希望 i 和 j 成为 x 和 y 坐标,这可能会解决您的问题。 如果不是,请提供更多信息。