2012-04-21 104 views
0

我有一個非常惱人的問題,拋出一個IndexOutOfBoundsException的代碼,我真的不明白爲什麼。該logcat的指向下面的代碼的「addTimetableItem」這病解釋更多:IndexOutOfBoundsException與Android ArrayList

if(sortedFridayTimes.size()>0){ 
    insertDay("Friday"); 
    for(int i=1; i<sortedFridayTimes.size()+1;i++){ 
     addTimetableItem(sortedFridayTimes.get(i)); 
    } 
} 

「sortedFridayTimes」是包含我自己的「時間表條目」的對象一個ArrayList,我已經分成順序。首先檢查大小,看看是否有任何對象,如果有,然後「insertDay」運行爲標題創建一個新的文本視圖,並將其添加到佈局(這工作正常..)。 在for循環中,想法是將所有對象從arraylist添加到佈局中。現在我知道「addTimetableItem」代碼的工作原理已經測試過,但我的問題是,我似乎無法從陣列列表中獲取最後一個對象。如果我宣佈在for循環只爲

"i<sortedFridayTimes.size()" 

然後該程序運行正常,但我不明白的,我知道的存在,因爲我已經調試,看着我的變量數組列表中的最後一項運行。如上所示添加「+1」我現在得到IndexOutOfBoundsException,我真的不知道爲什麼。正如我所說的,我已經調試過,並且我知道在我試圖指向的數組列表中存在一個條目,但它只是崩潰。如果需要,我可以提供更多的代碼,但是有沒有人有任何想法?

回答

1
i<sortedFridayTimes.size()+1 

您正在循環播放數組中的最後一個元素。爲什麼+1

如果在陣列中N元素,則通過元件到N-1是從索引0

所以它應該是:

for(int i=0; i<sortedFridayTimes.size(); i++) { 
+0

嗯,我認爲,但如果說大小爲2,我會從1開始,將小於2,因此代碼將執行,但是,然後我會變成2,這不是不到2,因此代碼wouldnt運行我會錯過列表中的第二個值..對吧? – 2012-04-21 19:36:34

+0

從0開始,在N-1結束。 – 2012-04-21 19:38:58

+0

歡呼的幫助,現在排序。 – 2012-04-21 19:41:54

1

最後一個循環在你的循環運行:

sortedFridayTimes.get(sortedFridayTimes.size())

這將永遠是出界,因爲元素是零索引。

例如,如果數組大小爲「5」,則不能訪問索引「5」,因爲數組中的5個元素是0,1,2,3,4

+0

我認爲用ArrayList的索引從1開始? – 2012-04-21 19:38:44

+0

@JoshSuckling:不,總是0. – Tim 2012-04-21 19:39:19

+0

好的歡呼聲,真的有點愚蠢,我不知道爲什麼我認爲它是1,我的頭在這裏!無論如何,測試和工作,再次感謝。 – 2012-04-21 19:41:15

2

您應該接受@ Tim's或@ Graham的答案,這只是一個附錄。他們對您的size()+1超過陣列末尾是正確的。

如果您在使用索引才能正確地得到一切淘汰名單的難度,你也可以嘗試使用for-each循環(取決於你使用Android SDK版本)。我假設sortedFridayTimes是類別TimetableItem的列表,因爲您沒有指定。

所以這個:

if(sortedFridayTimes.size()>0){ 
    insertDay("Friday"); 
    for(int i=1; i<sortedFridayTimes.size()+1;i++){ 
     addTimetableItem(sortedFridayTimes.get(i)); 
    } 
} 

變爲這樣:

if(!sortedFridayTimes.isEmtpy()){ 
    insertDay("Friday"); 
    for(TimetimeItem item : sortedFridayTimes){ 
     addTimetableItem(item); 
    } 
} 

乾淨了一點,如果你不真正需要使用i任何地方。

+0

Android最佳做法還建議使用增強型for循環來獲得更高效的程序。這是一個很好的答案。 – jjNford 2012-04-21 20:10:55

+0

輝煌,歡呼的建議。 – 2012-04-22 12:20:23

相關問題