数组索引超出范围?怎么样?

时间:2013-09-06 11:31:51

标签: java arrays indexoutofboundsexception sudoku backtracking

你好,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的输出选项卡中一遍又一遍地调用相同方法调用的大量“数组索引超出范围”异常。

我不知道是什么导致了这个错误。据我所知,行和列不超过0-8范围......它必须是2D阵列的问题? 谢谢你的时间。

编辑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)

......等等,它们正在重复,因为它似乎正在通过代码并不断抛出异常?

2 个答案:

答案 0 :(得分:0)

Execption将准确说明问题出在哪一行。查看代码,我猜想在一些next调用之后,resi方法(next(matrica,row, col);)的第三行将抛出该执行,因为它错过了对该行的一些验证。我们确保将execption粘贴到像pastebin.com这样的网站上,并通知我们,我们看到它=)

答案 1 :(得分:0)

next()中,您一直在递增row,但row的{​​{1}}没有失败安全索引超出检查范围,因此没有col保证row将超过大于8的值,即9。

因此,在row行增加(row+1)之前,请务必检查resi(matrica2,row + 1, 0);是否小于8。

private static void next(int [][] matrica2,int row, int col) {
if (col  8) {
    resi(matrica2,row, col + 1);
} else if(row < 8) { // Make sure to increment row only if less than 8
    resi(matrica2,row + 1, 0);
} else {
    // Stop the application (May Be)
 }

}