我正在学习堆栈并发现它们非常有趣,但是,我通过用户定义的堆栈进行的迭代正在输出以下内容:
此外,该程序的目标是让用户输入数据,直到输入“结束”,然后从上到下打印堆栈。
错误
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());
}
}
}
答案 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