java用迭代器边遍历边删除的问题

packagecom.leping.www;importjava.util.ArrayList;importjava.util.Iterator;importjava.u... package com.leping.www;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Remove {

/**
* @param args
*/
public static void main(String[] args) {
List<String> li = new ArrayList<String>();
for (int i = 0; i < 15; i++) {
li.add(String.valueOf(i));
}
// Iterator<String> it = li.iterator();
// while (it.hasNext()) {
// //System.out.println(it.next());
// if (Integer.parseInt((String) it.next()) == 9) {
// //Integer.parseInt((String) it.next())==12
// it.remove();
// }
// if(Integer.parseInt((String) it.next())==12)
// it.remove();
// }
for (Iterator<String> it = li.iterator(); it.hasNext();) {
// String ii = (String) it.next();
// System.out.println(ii);
if ((Integer.parseInt((String) it.next()) == 9)
|| (Integer.parseInt((String) it.next()) == 12)) {
it.remove();
}
}
for (Object o : li) {
System.out.println("o = " + o);
}
}
}
报错为:
Exception in thread "main" java.util.NoSuchElementException
at java.util.AbstractList$Itr.next(AbstractList.java:350)
at com.leping.www.Remove.main(Remove.java:31)
请帮助为什么,用别的办法来删除已经知道了.
我自己测试了一下,如果用迭代器来做if的判断就出错,但是如果先用迭代器提取出来保存在一个对象里面,用这个对象来做判断,就没有问题:
for (Iterator<String> it = li.iterator(); it.hasNext();) {
String ii = (String) it.next();
System.out.println(ii);
if ((Integer.parseInt(ii) == 9)
|| (Integer.parseInt(ii) == 12)) {
it.remove();
}
}
展开
 我来答
百度网友a28217434
2008-07-15 · TA获得超过569个赞
知道小有建树答主
回答量:451
采纳率:0%
帮助的人:347万
展开全部
if ((Integer.parseInt((String) it.next()) == 9)
|| (Integer.parseInt((String) it.next()) == 12)) {

你这个判断有问题,你执行了两次 next()方法。

这样改以下。

int i = Integer.parseInt((String) it.next();
if ((i == 9)|| (i == 12)) {
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式