1

こんにちはスタックオーバーフローの善良な人々!理解できない奇妙な問題があります。問題のある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)

...など、コードを通過して例外をスローし続けているように見えるので、彼らは繰り返していますか?

4

2 に答える 2

0

ではnext()インクリメントされていますrowが、 のように の範囲外のフェイルセーフ インデックス チェックはありません。そのrowため、 8 より大きい値、つまり 9 を超えるcol保証はありません。row

そのため、 行で ( ) をrowインクリメントする前に、 が 8 未満かどうかを確認してください。row+1resi(matrica2,row + 1, 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)
 }

}

于 2013-09-06T11:56:18.297 に答える
0

Execption は、問題が発生した行を正確に示します。コードを見ると、いくつかのnext呼び出しの後、resiメソッド ( next(matrica,row, col);) の 3 行目で、行の検証が欠落しているため、execption がスローされると推測できます。確認するには、pastebin.com などのサイトに execption を貼り付けて、ここで確認できるように通知してください =)

于 2013-09-06T11:42:18.053 に答える