无法从列表中删除元素,因为超出范围异常

时间:2014-12-04 23:03:10

标签: java list arraylist

我有一个List<Integer> nums = new ArrayList<>(),我这样做:

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

这里有{1,2,3,4,5,6,7,8,9}这个清单。

我想要做的是给另一个List,如果我收到数字8,我想从nums列表中删除8。我是这样做的:shuffle.remove(genNumber-1);

问题是如果我已经删除了3个数字(实例为{1,2,3})并且我收到的genNumber为9,它将尝试删除索引9-1 = 8,它不存在因为当前列表是{4,5,6,7,8,9}&lt; - &gt; index = 6,因此没有删除我想要的数字是9。

谢谢你们

4 个答案:

答案 0 :(得分:2)

传递Integer而不是int。这将确保使用List#remove(Object)而不是List#remove(int)

答案 1 :(得分:1)

不要使用int,因为它会删除索引处的内容,而不是匹配的对象。你需要使用Integer类型的东西,它有一个构造函数,它接受一个int并且应该是一个快速修复。

int toRemove = 9;

nums.remove(new Integer(toRemove));

答案 2 :(得分:0)

这个问题措辞奇怪。
所以这两种解决方案可以如下。

  1. 按索引删除
  2. 按值删除。
  3. 1)如果您想通过索引删除,那么您将不得不为如何生成数字添加一些逻辑,使其永远不会超过list.size()

    2)如果要按值删除,则只需遍历列表并删除所需的值即可。现在你必须弄清楚你想要用数组中的额外空间做什么。 (假设您从不处理负值,您可以添加&#34;占位符&#34; -1)

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

答案 3 :(得分:0)

nums.remove((整数)9);应该修理它; 您可以将int传递给它,因此它假定您通过索引方法remove(int index)调用remove。通过将9显式指定为对象,您正在使用列表的remove(Object o)方法。 参考list

的文档