Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数组索引超出范围?怎样_Java_Arrays_Indexoutofboundsexception_Sudoku_Backtracking - Fatal编程技术网

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

Java 数组索引超出范围?怎样,java,arrays,indexoutofboundsexception,sudoku,backtracking,Java,Arrays,Indexoutofboundsexception,Sudoku,Backtracking,大家好,这里的人们! 我有一个奇怪的问题,我不明白。 我将发布两个有问题的方法: 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

大家好,这里的人们! 我有一个奇怪的问题,我不明白。 我将发布两个有问题的方法:

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;

    }
}

。。。以此类推,它们在重复,因为它似乎正在遍历代码并不断抛出异常?

执行选项将确切地说明问题发生在哪一行。查看代码,我猜在一些
next
调用之后,
resi
方法的第三行(
next(matrica,row,col);
)将抛出execption,因为它错过了行的一些验证。为了确保我们的安全,请将执行选项粘贴到一些网站上,如pastebin.com,并通知此处,以便我们在
next()
中看到它=)

您一直在增加
,但没有对
进行故障安全索引越界检查,就像对
进行检查一样,因此不能保证
将超过大于8的值,即9

因此,在第
行resi(矩阵2,行+1,0)中递增(
行+1
)之前,确保检查
是否小于8

private static void next(int[][]矩阵2,int行,int列){
如果(第8栏){
resi(矩阵2,行,列+1);
}否则,如果(行<8){//请确保仅当小于8时才增加行数
resi(矩阵2,行+1,0);
}否则{
//停止应用程序(可能是)
}

}

您能给我们看一下阵列的初始化吗?您也能标记出有异常的那一行吗。我认为,如果你这样做,你可以保证一个几乎即时的解决方案。Cheers.btw resi方法中的matrica2和matrica4是什么?粘贴stracktraceTips:1)添加@JohnnyAW(或任何人,
@
很重要)以通知他们新的评论。2) 发个短信,我想你可能在搞什么鬼。我只是注意到我没有办法让解算器停止解算,这最终会使“行”超过8。我会尝试修复它,然后我会在这里发布。好吧,现在异常停止发生了。这很好。但是这个程序现在正在无限期地运行。我写了一行应该打印出matrica4,但从来没有。同样,当我尝试调试它时,它到达第一个“next”调用,当我按F8(单步执行)时,它不再给我使用F8的选项,就像它禁用它,因为它正在做一些我无法中断的事情。显然,当所有行和列都完成时,解决
next()方法,如在answer
中所示,不执行任何操作,因此应用程序进入无限循环。正如我所建议的,您可以在next()中的
else块中放置停止应用程序的逻辑,或者尝试在那里设置断点。另外,如果您已经解决了越界错误,那么最好结束这个问题。需要注意的是,应用程序本质上是递归的,因此需要一个断点(脱离递归的情况)。可能的断点是next()
中的
else块。它说我应该避免说“谢谢”的评论,但我必须感谢您的帮助。
 private static void next(int [][] matrica2,int row, int col) {
    if (col < 8) {
        resi(matrica2,row, col + 1);
    } else {
        resi(matrica2,row + 1, 0);
    }
}
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)
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)
 }