[英]Iterating through a stack in Java giving me errors
我正在學習堆棧,發現它們很有趣,但是,通過用戶定義的堆棧進行的迭代包含以下內容:
此外,該程序的目標是讓用戶輸入數據,直到輸入“ end”為止,然后從上至下打印堆棧。
錯誤
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());
}
}
}
在獲得迭代器之后,您已經通過在集合中添加元素來修改堆棧,這就是為什么會出現此錯誤的原因。
完成將所有元素添加到堆棧中后,需要調用迭代器。
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);
}
在代碼中,首先要創建一個迭代器,而不是修改堆棧。 迭代器檢查是否有任何更改,如果集合已更改,則返回錯誤-因此,必須在將所有內容添加到堆棧之后(而不是在此之前)創建迭代器。
您可以在此處了解更多信息: http : //www.journaldev.com/378/how-to-avoid-concurrentmodificationexception-when-using-an-iterator
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.