[英]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.