2016-01-20 62 views
0

我得到數組索引超出範圍異常在prog的最後一行, output[1][1]在那裏產生這樣的異常。但在前面的循環中,同樣的事情仍然正常。數組索引超出範圍異常無故

{ 
    int ict=66,total_slots=12,h1=15,index_count=65; 
    String output[][] = new String[ict][total_slots+1]; 

    for (int x = 0; x < (ict); x++) 
     output[x][0] = Integer.toString(x); 
    for (int y = 0; y < (total_slots + 1); y++) 
     output[0][y] = Integer.toString(y); 
    for (int x = 1; x <= (index_count); x++) 
     for (int y = 1; y <= (total_slots); y++) 
      output[x][y] = "n"; 

    for (int x=1; x <= h1; x++) { 
     output[x][1]="y";//exception occurs here 
     limit[x]++; 
    } 
} 
+6

歡迎來到Stack Overflow。請更注意代碼的格式 - 如果沒有任何縮進,*真的很難理解。請閱讀http://tinyurl.com/stack-hints –

+2

h1的價值是什麼? – hasnae

+0

@DenysSéguret:希望我的確如此:) –

回答

1

記住,當你聲明一個數組一樣String output[][]=new String[5][5];然後output[4][4]是您已聲明數組您就可以訪問,數組索引從0

開始最後一個元素:

String output[][] = new String[ict][total_slots+1]; 

您for loop你有

for(int x=1; x<=(ict); x++) 
    for(int y=1; y<=(total_slots); y++) 
     output[x][y]="n"; 

在最後迭代外部循環和內部循環的第一次迭代,您試圖訪問output[ict][0],這是引發異常的原因。請記住,因爲0是第一個索引,所以ict - 1將是第一個維度的最後一個有效索引。

試試這個:

String output[][] = new String[ict][total_slots]; //this is cleaner 

for(int x=0; x<ict; x++) 
    for(int y=0; y<total_slots; y++) 
     output[x][y]="n"; 

這種方式外循環的最後一次迭代只會上升到ict - 1

編輯: 看來你已經顯著編輯的問題。請不要在將來回答問題時編輯您的問題,因爲這隻會讓新讀者感到困惑。

由於您的代碼現在正確,唯一的錯誤(編譯時間不少,與例外無關)是limit[x]++;無效的事實,因爲limit尚未在此範圍內聲明。否則代碼是合法的,運行良好。

+0

數組聲明爲total_slots + 1,所以'<='對。糟糕的風格無論如何用+1聲明並使用<=。 – hinneLinks

+0

我糾正了,他宣佈第一個維度錯了。編輯答案 – ForeverStudent

+0

嘿ForeverStudent!感謝你的努力,但是我沒有在你解釋過的線上得到例外。輸出[] [] =「n」與兩個for循環清晰地工作。在下一個循環中,當輸出[1] [1]被訪問時,它們發生異常。 –

1
{ 
     int ict=66,total_slots=12,h1=15,index_count=65; 
.................................................. 
.................................................. 
     for (int x=1; x <= h1; x++) { 
       output[x][1]="y";//exception occurs here 
       limit[x]++; 
      } 
     } 

在最後的for循環,您收到ArryIndexOutOfBoundsException,而試圖訪問元件輸出[13] [1]導致你的陣列寬度只有13即最大指數爲12,但不超過該

使用total_slots代替H1

1

我在PROG的最後一行得到數組索引越界異常,輸出[1] [1]有生成這樣的異常。

重新檢查控制檯輸出。你一定錯了錯誤行,因爲沒有辦法產生這樣的例外。最可能的問題在於limit[],我們不知道它是如何聲明的。

順便說一句,最後一行是limit[x]++;)