簡體   English   中英

遍歷Java中的堆棧給我錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM