我有一个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。
谢谢你们
答案 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)如果您想通过索引删除,那么您将不得不为如何生成数字添加一些逻辑,使其永远不会超过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
的文档