2013-04-23 50 views
0

我正在使用遞歸方法打開掃雷器,以打開與塊「0」相鄰的所有瓦片。線程「AWT-EventQueue-0」中的異常java.lang.ArrayIndexOutOfBoundsException:10

一切順利,直到我得到我在標題中提到的異常。例外情況發生在if(removalList[num1][num2] == 1){return;},但確保將刪除列表中的所有初始值設置爲零。 (供您參考,1表示該物品已被添加到removalList以備以後使用)。

我也檢查過是否在界限內做if(num1 > gameWidth || num2 > gameHeight || num1 < 0 || num2 < 0){return;}. (gameHeight and width are both 10),但由於某種原因它認爲它出界了。

感謝您的幫助!

private void function(int c5, int r5) 
{ 
    int num1 = c5; 
    int num2 = r5; 

    if(num1 > gameWidth || num2 > gameHeight || num1 < 0 || num2 < 0) 
    { 
     return; 
    } 
    if(removalList[num1][num2] == 1) 
    { 
     return; 
    } 
    if(blocks[num1][num2] == 0) 
    {  
     System.out.println("Added (" + num1 + ", " + num2 + ") to removal list."); 
     removalList[num1][num2] = 1; 

     function(num1-1, num2); 
     function(num1, num2-1); 
     function(num1+1, num2); 
     function(num1, num2+1); 

    } 
    else if(blocks[num1][num2] > 0 && blocks[num1][num2] < 9) 
    { 
     removalList[num1][num2] = 1; 
     return; 
    } 
    else 
    { 
     return; 
    } 
} 

回答

1

沒有看到更多的代碼,特別是removalList的聲明,我只能猜測。我的猜測是,removalListgameWidth * gameHeight元素。因此指數從0gameWidth - 10gameHeight - 1。您的支票允許指數高達gameWidthgameHeight,這將導致您得到的例外。

+0

謝謝,我完全錯過了! – user2052855 2013-04-23 06:26:12

1

如果數組的大小是10,陣列中的最大可能的可訪問索引將是array[size-1]。如果您嘗試訪問大於或等於該大小的索引,則會得到所謂的ArrayIndexOutOfBoundsException

E.g: -

int[] test = new int[5]; 
test[0] = 1; // Allowed 
test[1] = 2; // Allowed 
test[2] = 3; // Allowed 
test[3] = 4; // Allowed 
test[4] = 5; // Allowed 
test[5] = 6; // NOT Allowed - You'll get the ArrayIndexOutOfBoundsException here. 

因此,你的情況,

removalList[9][9]是允許的,但removalList[10][10]會給ArrayIndexOutOfBoundsException異常

相關問題