2013-01-14 130 views
-1

我有一個ArrayList,它填補前人的精力一個TableModel的麻煩。 在第二個for循環的應用程序崩潰與拋出IndexOutOfBoundsException在一個ArrayList,同時檢查空,JAVA

java.lang.IndexOutOfBoundsException: Index: 14, Size: 14 

第三次在

if (al.get(i + 4)!=null) 

,我不知道爲什麼,因爲我在這種情況下是10,那麼它會檢查指數14 ,它實際上是空的。它應該進入else循環,但相反它崩潰。感謝您的幫助,這裏的代碼:

String[] teile = tabelleninhalt.split("#"); 
ArrayList<String> al = new ArrayList<String>(); 
     for (int i = 1; i < teile.length; i++) { 
      al.add(teile[i]); 

     } 
     for (int i = 0; i < al.size(); i = i + 5) { 
      if (al.get(i + 4)!=null) { 
       tabModel.addRow(new Object[] { al.get(i), al.get(i + 1), 
         al.get(i + 2), al.get(i + 3), al.get(i + 4) }); 
      } else { 
       tabModel.addRow(new Object[] { al.get(i), al.get(i + 1), 
         al.get(i + 2), al.get(i + 3) }); 
      } 
     } 

回答

3

沒有,當大小爲14,有沒有索引14.有效的索引是0至13的包容性。

你的循環應該是這樣的:

for (int i = 0; i < al.size() - 4; i += 5) 

如果您的列表是爲了有5項的批次,雖然,這聽起來像你有一個問題,如果你已經有了一個大小爲14。尺寸不應該是5的倍數嗎?

編輯:如果你要正確對待丟失的最終值作爲有效無效,但仍需要以前的4個領域,你可能想:

for (int i = 0; i < al.size() - 3; i += 5) { 
    if (i + 4 < al.size() && al.get(i + 4) != null) { 
     ... // Use al.get(i + 4) 
    } else { 
     ... // Don't use it 
    } 
} 

(但很難在此基礎上沒有按問題告訴「T給予的任何要求。)

+1

我很榮幸背後@JonSkeet只爲11秒IndexOutOfBoundException! :D – 2013-01-14 18:25:12

+0

填充到表中的字符串是從文件中讀出的,並且有些部分可以保持打開狀態,所以它不一定是5的倍數。您的解決方案不起作用,因爲最後一行不會被填充。但是thx反正:) –

+2

@MaikFruhner:那麼它不會拋出一個異常 - 它很難給當問題arne't指定的這些要求滿足要求的答案。你會計數任何缺失的字段有效空嗎? –

0

索引14是ArrayList的第15元件。像大多數編程語言一樣,Java中的數組(和List)都是零索引的。

0

它不爲空,那個位置根本不存在,這就是爲什麼你得到一個IndexOutOfBoundsException例外。

0

如果您嘗試訪問大於arraylist大小的位置,您將獲得IOBE.You無法將該位置比較爲null,因爲該位置無法訪問。請檢查大小而不是null。

0

這聽起來像你只陣中有14個項目,存儲在索引中0-13。嘗試訪問索引14將導致異常。

0

的問題是,該指數從0開始和最後一個元素的索引爲13.指標14訪問它因此拋出

+0

其實它拋出'IndexOutOfBoundsException' – mishadoff

+0

是的,你是對的 – Flo

相關問題