こんにちはスタックオーバーフローの善良な人々!理解できない奇妙な問題があります。問題のある2つの方法を投稿します。
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;
}
}
そしてもう1つは:
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 の範囲を超えていません... 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)
...など、コードを通過して例外をスローし続けているように見えるので、彼らは繰り返していますか?