2012-03-21 61 views
1

嗨,大家好我趕上例外:ArrayList中意外出局邊界結果

java.lang.IndexOutOfBoundsException:指標:1,大小:0

代碼如下所示:

**ArrayList decoded = new ArrayList(10); 
     decoded.add(1, "A");** 

我真的不明白這裏有什麼問題嗎?

也許有人可以幫助我做到這一點。


基本上我想這樣做: 我已經例如字符喜歡這樣的:

ABCEDFG 

和數組用數字:

321211 

我需要採取第一個字符和第一數。焦炭寫爲S的ArrayList:

S={"A"}; 

看號碼並再次寫入相同的字符在那個位置,如果數爲3則排在第三位: (如數字1,那麼只寫它的ArrayList)

S={"A","","","A"} 

並從arrayLists中刪除數字和字符。現在他們看起來像這樣:

BCEDFG 

21211 

並且一直到最後一樣。

回答

5

我懷疑你在容量大小之間混淆。這條線:

ArrayList decoded = new ArrayList(10); 

...創建一個具有容量的10(它不會需要在內部,直到第11要素加入長)的列表,但尺寸的0。只有索引,你可以添加任何東西是0.

如果你想能夠在任意位置設置值,你應該先填充列表,例如(使用泛型只是因爲我討厭使用原始類型):

List<String> decoded = new ArrayList<String>(10); 
for (int i = 0; i < 10; i++) { 
    decoded.add(""); // Or perhaps null 
} 

... 
decoded.set(1, "S"): // This is now fine, replacing element 1 

或者,如果你已經知道你想要的大小,你可以使用數組來開始 - 他們有一個固定大小,每個元素是元素類型的默認值(因此null字符串,例如):

String[] decoded = new String[10]; 
decoded[1] = "S"; 
2

首先ArrayList s是0索引到第一指數增加則必須使用此:

decoded.add(0, "A"); 

或添加到列表的末尾爲止(我想這是你真正想要什麼這裏):

decoded.add("A"); 

此外,除非已在索引0,1,... n-1處具有元素,否則不能在索引n處插入元素。如果你想讀取和寫入任意索引,那麼你應該要麼各項指標在初始化ArrayList與空值,或者你可以只使用不是數組:

String[] decoded = new String[10]; 
decoded[1] = "A"; 

我還告訴你刪除從ArrayList中的每個元素開始循環,因爲這會給出O(n )的性能。相反,你可以使用一個隊列。或者實際上並沒有從列表中刪除元素,但只需要一個計數器即可記住到目前爲止使用了多少元素。

0

看一看的ArrayList.add(int index, E element)的API文檔。它清楚地說,方法拋出IndexOutOfBoundsException - if index is out of range (index < 0 || index > size()).

而在你的情況,當你通過調用decoded.add(1, "A")index 1插入一個元素,您的列表decodedsize()0