【问题标题】:How to call toString() method of all objects in a Stack?如何调用堆栈中所有对象的 toString() 方法?
【发布时间】:2019-07-31 17:30:46
【问题描述】:

我有一个类 (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】:

    你的问题是你得到迭代器。您在创建 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。变量名应全部以小写字母开头,而类名应以大写字母开头。学习这一点并遵循这一点将使我们能够更好地理解您的代码,并让您更好地理解其他人的代码。

    【讨论】:

      猜你喜欢
      • 2020-10-30
      • 1970-01-01
      • 2020-05-29
      • 1970-01-01
      • 2021-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多