簡體   English   中英

數組索引超出范圍? 怎么樣?

[英]Array index out of bounds? How?

您好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的輸出選項卡中,同一方法一遍又一遍地調用時,會出現很多“數組索引超出范圍”異常。

我不知道是什么導致了該錯誤。 據我所知,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)

...依此類推,它們在重復,因為似乎正在遍歷代碼並不斷拋出異常?

執行程序將確切說出發生問題的那一行。 看代碼,我猜想在next一些調用之后, resi方法的第三行( next(matrica,row, col); )將拋出執行,因為它錯過了對該行的某些驗證。 我們可以確定的是,將執行程序粘貼到如pastebin.com之類的網站上,並在此處通知我們看到它=)

next()您一直在遞增row但是沒有像col那樣對row故障保護索引的邊界檢查,因此不能保證row值將大於8,即9。

因此,請確保在行resi(matrica2,row + 1, 0); )中增加( row+1 )之前檢查row是否小於8 resi(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)
 }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM