在Java中迭代堆栈给我错误

时间:2014-04-23 20:34:13

标签: java stack

我正在学习堆栈并发现它们非常有趣,但是,我通过用户定义的堆栈进行的迭代正在输出以下内容:

此外,该程序的目标是让用户输入数据,直到输入“结束”,然后从上到下打印堆栈。

错误


insertionException in thread "main" java.util.ConcurrentModificationException
at java.util.Vector$Itr.checkForComodification(Vector.java:1156)
at java.util.Vector$Itr.next(Vector.java:1133)
at Stacker.main(Stacker.java:29)

程序


import java.util.*;

public class Stacker {

    public static void main(String[]args)
    {
        Scanner input = new Scanner(System.in);
        Stack<String> stackInformation = new Stack<String>();
        Iterator<String> iter = stackInformation.iterator();

        String stackAdd = input.nextLine();

        while (!stackAdd.equalsIgnoreCase("end"))
        {
            stackInformation.push(stackAdd);

            stackAdd = input.nextLine();

        }

        System.out.println("Exited stack insertion");

        while(iter.hasNext() && iter.next()!=null)
        {
            System.out.println(iter.next());
        }

    }

}

2 个答案:

答案 0 :(得分:3)

您通过在获取迭代器后添加集合中的元素来修改堆栈,这就是您收到此错误的原因。

完成后,需要调用迭代器将所有元素添加到堆栈中。

Iterator<String> iter = stackInformation.iterator();
System.out.println("Exited stack insertion");

while(iter.hasNext()){
    System.out.println(iter.next());
}

请注意,您也可以使用for-each循环:

System.out.println("Exited stack insertion");
for(String s : stackInformation){
    System.out.println(s);
}

答案 1 :(得分:0)

在您的代码中,您首先要创建一个迭代器,而不是修改堆栈。迭代器检查任何更改并在集合发生更改时返回错误 - 因此您必须在将所有内容添加到堆栈之后创建迭代器,而不是在此之前。

您可以在此处详细了解:http://www.journaldev.com/378/how-to-avoid-concurrentmodificationexception-when-using-an-iterator