2014-12-04 25 views
1

我有一個List<Integer> nums = new ArrayList<>()和我這樣做:無法刪除從列表元素,因爲出boundsexception

for(int i=1;i<=9;i++) 
    nums.add(i); 

這裏我有列表{1,2,3,4,5,6,7, 8,9}。

我想要做的是給出另一個列表,如果我收到數字8,我想從nums列表中刪除8。我這樣做是這樣的:shuffle.remove(genNumber-1);

問題是如果我已經刪除了3個數字({1,2,3})),並且我收到的genNumber是9,它會嘗試刪除已經不存在的索引9-1 = 8因爲當前的表爲{4,5,6,7,8,9} < - >指數= 6,因此並沒有刪除我想要的那是9.

由於球員數量

+0

...或調用remove(Integer.valueOf(genNumber));調用remove(Object o) – 2014-12-04 23:12:41

回答

1

不要使用int,因爲這是要消除任何的是指數,而不是匹配對象的。你需要使用Integer類型的東西,它有一個構造函數,它接受一個int值,並且應該是一個快速修復。

int toRemove = 9; 

nums.remove(new Integer(toRemove)); 
2

通過Integer而不是int。這將確保使用List#remove(Object)而不是List#remove(int)

0

這個問題奇怪的措辭。
所以這兩種解決方案可能如下。

  1. 由索引
  2. 去除由值移除。

1)如果您想通過索引中刪除,那麼你將會有一些邏輯添加到您如何生成你的號碼不能超過list.size()

2)如果要通過值,則刪除你可以遍歷整個列表並刪除你想要的值。現在你必須弄清楚你想用數組中的額外空間來做什麼。 (比方說,你從來沒有處理負值,你可以添加-1「佔位符」)

for(int i = 0; i < list.size(); i++){ 
     if(list[i] == toMatchValue) list[i] = -1; 
    } 
0

nums.remove((Integer)9);應該修復它; 你可能會傳入一個int,所以它假定你正在調用remove方法remove(int index)。通過顯式指定9作爲一個對象,您正在使用列表的remove(Object o)方法。 參考文檔list