【发布时间】:2015-01-08 20:28:20
【问题描述】:
我正在用 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;
}
现在,它似乎根本没有改变 model[][]。当我初始化这个类时,我首先在 model[][] 中的任何地方都放置一个 0,然后导入一个包含有效数独值的文件。这部分工作到目前为止。当我现在运行它时,好像 fsolve 函数什么都不做。
这是我导入文件 后的样子,但在fsolve 函数后是一样的。
【问题讨论】:
-
使用堆栈跟踪发布您的异常。
标签: java recursion boolean indexoutofboundsexception sudoku