gpt4 book ai didi

java - 数组索引越界?如何?

转载 作者:行者123 更新时间:2023-12-01 04:23:58 26 4
gpt4 key购买 nike

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范围...这一定是二维数组的问题?感谢您抽出时间。

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

...等等,它们在重复,因为看起来它正在遍历代码并不断抛出异常?

最佳答案

next()中,您一直在递增row,但没有对row进行故障安全索引越界检查,因为有对于col,因此不能保证row会超过大于8的值,即9。

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

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)
}

}

关于java - 数组索引越界?如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18656818/

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