Java 如何调用堆栈中所有对象的toString()方法?

Java 如何调用堆栈中所有对象的toString()方法?,java,data-structures,stack,concurrentmodification,Java,Data Structures,Stack,Concurrentmodification,我有一个类(myObject),它有自己的toString()方法。然后我创建了另一个名为myStack的类,它扩展了Stack。这个类应该是myObject对象的堆栈 当我尝试使用迭代器在堆栈上迭代以打印每个对象时,它会抛出ConcurrentModificationException 这是我的密码: public class myStack extends Stack<myObject> { Iterator<myObject> iter = this.it

我有一个类(myObject),它有自己的toString()方法。然后我创建了另一个名为myStack的类,它扩展了Stack。这个类应该是myObject对象的堆栈

当我尝试使用迭代器在堆栈上迭代以打印每个对象时,它会抛出ConcurrentModificationException

这是我的密码:

public class myStack extends Stack<myObject> {

    Iterator<myObject> iter = this.iterator();

    public void printStack(){

        while(iter.hasNext()){

            myObject temp = iter.next();

            System.out.print(temp.toString());

        }

    }

} 
公共类myStack扩展堆栈{
迭代器iter=this.Iterator();
公共void printStack(){
while(iter.hasNext()){
myObject temp=iter.next();
系统输出打印(temp.toString());
}
}
} 
在迭代堆栈时,我没有修改堆栈,因此我不明白为什么会抛出异常。

您的问题在于获取迭代器时。您将在myStack对象创建时获得它(请将类重命名为
myStack
),然后修改堆栈,然后使用迭代器,而这不会发生,因为您在修改堆栈后使用迭代器。相反,您需要在
printStack()
方法顶部使用之前提取迭代器,以便它是一个有效且稳定的迭代器,表示当时堆栈的状态

公共类MyStack扩展堆栈{
公共void printStack(){
迭代器iter=this.Iterator();//***此处***
while(iter.hasNext()){
myObject temp=iter.next();
系统输出打印(temp.toString());
}
}
顺便说一句,您需要学习和使用。变量名都应该以小写字母开头,而类名应该以大写字母开头。学习这一点并遵循这一点可以让我们更好地理解您的代码,也可以让您更好地理解其他人的代码

public class MyStack extends Stack<myObject> {

    public void printStack() {
        Iterator<myObject> iter = this.iterator(); // *** here***
        while(iter.hasNext()) {
            myObject temp = iter.next();
            System.out.print(temp.toString());
        }
    }