我写这篇文章是为了从ArrayList中删除所有偶数,但它出乎意料地反而删除了几率。
代码:
ArrayList arr = new ArrayList<Integer>(); //filled 1-1000
protected void eliminateEven()
{
x = 0;
for(Iterator<String> iter = arr.iterator(); iter.hasNext(); )
{
iter.next();
if(x % 2 == 0)
{
iter.remove();
}
x++;
}
System.out.println(arr);
}
顺便说一下,&#34; arr&#34;是一个预先填充到1000的ArrayList。我很感激一些帮助,所以我可以弄清楚我做错了什么。
答案 0 :(得分:1)
您似乎有一个Integer
列表和一个String
的迭代器。这没有多大意义。但假设它们是字符串,则需要在检查它们是否为偶数之前转换为整数。
您不需要维护x
索引:只需检查迭代器的值:
if (Integer.valueOf(iter.next()) % 2 == 0)
iter.remove();
或者,在Java 8中更简单:
arr.removeIf(i -> Integer.valueOf(i) % 2 == 0);
顺便说一句,我建议while
循环比没有for
子句的next
循环更清晰:
答案 1 :(得分:1)
您正在通过调用
跳过第一项iter.next()
在实际检查条件之前,那么你的迭代器实际上是一个'位置',而不是你的'索引',这就是为什么它会删除奇数元素而不是你想要的偶数。
答案 2 :(得分:0)
使用简单的外部循环,它将是这样的:
Iterator<String> iter = arr.iterator();
int x = 1;
while (iter.hasNext()) {
iter.next();
if(x % 2 == 0) {
iter.remove();
}
x++;
}
当然,还有更优雅的解决方案。