2015-06-25 35 views
2

我想使它,所以我可以寫入數據到ArrayList來跟蹤隨機整數,然後我會有一個前一個按鈕,將返回到最後的結果(這是隻是測試該代碼,這不是項目的完整代碼)嘗試獲取int arraySize並將其減1並重新打印數據時出現錯誤。任何想法爲什麼會發生這種情況,或者如何以其他方式完成任務。如何拉動數據向後移動在一個Java ArrayList

int lenth = 10; 
ArrayList<Integer> list = new ArrayList<Integer>(); 
int arraySize = list.size(); 
Random random = new Random(); 
int newRandom = random.nextInt(lenth); 
list.add(newRandom); 
newRandom = random.nextInt(lenth); 
list.add(newRandom); 
System.out.println(list.get(arraySize)); 
arraySize--; 
System.out.println(list.get(arraySize)); 

而且,這裏是我得到的錯誤:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1 
at java.util.ArrayList.elementData(Unknown Source) 
at java.util.ArrayList.get(Unknown Source) 
at test.C_MainActivity.main(C_MainActivity.java:22) 
+0

通過listArray,你的意思是'ArrayList'? –

+0

索引從0開始。因此,如果您有3個元素,則最後一個元素將位於索引「2」而不是「3」。 –

回答

3

當你將一個primitive(如int)到另一個,這個值複製到新的變量。對於對象,這有點不同,因爲這些變量將指向同一個對象。

int arraySize = list.size(); 

所以上面的線將只設置arraySize到列表的當前大小,arraySize不會改變,因爲列表大小的變化。既然你這樣做時,該列表是空的,這將是和保持0,你會嘗試得到的指數00-1 = -1的元素,這是你的例外用武之地。

你應該只設置後,你已插入所有元素。


注意,在Java中的索引從0開始,所以最後一個元素將已經在list.size() - 1,不list.size()

0

在將任何內容添加到列表之前,您正在設置arraySize。 arraySize的值將始終爲0,因爲您只將它設置在開頭。當你調用arraySize時,arraySize現在爲-1,當你調用list.get(arraySize)時,你會得到一個索引超出界限的異常,因爲你要求索引-1。

0

看起來你的目標是將值排入集合,然後將它們出列。例如,對於其push()pop()方法,例如,LinkedList將更合適。

無論如何,你不應該通過外部變量跟蹤ArrayList的大小。這些數據已在ArrayList內爲您提供,因此您只需查詢列表以瞭解其大小。

相關問題