【发布时间】:2013-09-06 11:31:50
【问题描述】:
你好 stackoverflow 的好人! 我有一个奇怪的问题,我无法理解。 我将发布我的两种有问题的方法:
private static void resi(int [][] matrica,int row, int col) {
if (matrica[row][col] != 0) {
next(matrica,row, col); // <--- this the line that first throws the exception
} else {
for (int num = 1; num < 10; num++) {
if (checkRow(matrica,row, num) && checkColumn(matrica,col, num) && checkBox(matrica,row, col, num)) {
matrica2[row][col] = num;
matrica4[row][col] = num;
next(matrica,row, col);
}
}
matrica[row][col] = 0;
}
}
还有一个:
private static void next(int [][] matrica2,int row, int col) {
if (col < 8) {
resi(matrica2,row, col + 1);
} else {
resi(matrica2,row + 1, 0);
}
}
所以,我正在根据我在网上找到的一些代码制作数独求解器。 现在,当我尝试调试程序时,我可以很好地检查一些行(并且它按预期工作)但是一旦程序第一次到达方法“resi”中对“next”方法的调用,它就会崩溃并出现数组索引边界异常。 如果我只是尝试在不调试的情况下运行程序,我会在 NetBeans 的输出选项卡中一遍又一遍地在同一个方法调用中得到很多“数组索引越界”异常。
我不知道是什么导致了这个错误。据我所知, row 和 col 不超过 0-8 范围......这一定是二维数组的问题? 感谢您的宝贵时间。
编辑 1:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9
at SudokuGame.Main.resi(Main.java:88)
at SudokuGame.Main.next(Main.java:107)
at SudokuGame.Main.resi(Main.java:89)
at SudokuGame.Main.next(Main.java:105)
at SudokuGame.Main.resi(Main.java:95)
...等等,它们正在重复,因为它似乎正在遍历代码并不断抛出异常?
【问题讨论】:
-
你能告诉我们数组的初始化吗?
-
您能否也标记出有异常的确切行。如果你这样做,我认为你可以保证几乎是即时的解决方案。干杯。
-
顺便说一句,resi-method 中的 matrica2 和 matrica4 是什么?
-
粘贴stracktrace
-
提示:1) 添加@JohnnyAW(或重要的
@)以通知他们有新评论。 2) 发布 SSCCE。
标签: java arrays indexoutofboundsexception sudoku backtracking