【问题标题】:Iterator has an issue in working with next function迭代器在使用下一个函数时存在问题
【发布时间】:2014-01-22 01:12:44
【问题描述】:

我已经编写了下面的代码,但我无法理解为什么它会给出 java.util.ConcurrentModificationException 。

谁能帮帮我?

提前致谢

static LinkedList<Integer> l1 = new LinkedList<Integer>(); 
public static void main(String[] args) 
{
    Scanner ob= new Scanner(System.in);
            Iterator<Integer> l2=l1.iterator();
    ListIterator<Integer> l3=l1.listIterator();

    while(true)
    {
                    System.out.println("Enter number (press 0 to exit the loop: ");
        int number=ob.nextInt();
        if(number == 0)
        {
            System.out.println("****");
            break;
        }
        l3.add(number);
    }
            while(l2.hasNext())
                System.out.println(l2.next());

}

【问题讨论】:

  • 啊!尝试使用具有实际意义的名称。 l1 是一个列表,但 l2 是一个迭代器?不是个好主意。
  • 由于使用hasnext 而不是hasNext,您当前的代码甚至无法编译。请发布演示问题的真实代码。
  • 你有l2.Next()而不是l2.next()(应该全部小写)。 Java 区分大小写。
  • @T.J.Crowder l2.next() 很好。
  • @ZouZou:在 OP 编辑​​之前它是 l2.Next()(就像它是 l2.hasnext())。 (我的评论措辞不佳,如果您看到 OP 在他们的代码中包含 l2.Next(),则只能模糊不清。我已经对其进行了一些改写。)

标签: java iterator next


【解决方案1】:

你得到了 mod 异常,因为你正在修改列表得到迭代器但调用迭代器上的方法。您正在获取迭代器,然后添加到列表中(例如,修改它),然后尝试使用迭代器。

两件事:

  1. 把你的

    Iterator<Integer> l2=l1.iterator();
    

    在输入循环之后

  2. 使用l1.add,而不是l3.add,并完全取消l3。没有理由(在此代码中)使用 ListIterator 只是为了添加到列表中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 2022-01-20
    • 2018-09-02
    相关资源
    最近更新 更多