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

问题描述 投票:1回答:1

我有一个类(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());

        }

    }

} 

我在迭代它时没有修改堆栈,所以我不明白为什么抛出异常。

java data-structures stack concurrentmodification
1个回答
3
投票

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

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());
        }
    }

顺便说一句,你会想学习和使用Java naming conventions。变量名都应以较低的字母开头,而类名以大写字母开头。学习这一点并遵循这一点将使我们能够更好地理解您的代码,并使您能够更好地理解其他代码。

© www.soinside.com 2019 - 2024. All rights reserved.