我写这个是为了从ArrayList中删除所有偶数,但它出乎意料地反过来并消除了几率 .
Code:
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);
}
顺便说一句,“arr”是预先填充到1000的ArrayList . 我很感激这方面的一些帮助,所以我可以弄清楚我做错了什么 .
3 回答
您正在通过调用跳过第一项
在实际检查条件之前,你的迭代器实际上是一个'位置',而不是你的'索引',这就是为什么它会删除奇数元素而不是你想要的偶数 .
您似乎有
Integer
的列表和String
的迭代器 . 这没有多大意义 . 但假设它们是字符串,则需要在检查它们是否为偶数之前转换为整数 .您不需要维护
x
索引:只需检查迭代器的值:或者,在Java 8中更简单:
顺便说一句,我建议
while
循环比没有next
子句的for
循环更清晰:使用简单的外部循环,它将是这样的:
当然,还有更优雅的解决方案 .