如何调用 Stack 中所有对象的 toString() 方法?
How to call toString() method of all objects in a Stack?
我有一个 class (myObject),它有自己的 toString() 方法。然后我创建了另一个名为 myStack 的 class,它扩展了 Stack。这个 class 应该是一堆 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 对象时得到它(请将 class 重命名为 MyStack
), 然后修改堆栈 ,然后使用迭代器,这不会' t fly 因为你在修改堆栈后使用迭代器。相反,您需要在 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。变量名称应全部以小写字母开头,而 class 名称应以大写字母开头。了解这一点并遵循这一点将使我们能够更好地理解您的代码,并使您能够更好地理解其他人的代码。
我有一个 class (myObject),它有自己的 toString() 方法。然后我创建了另一个名为 myStack 的 class,它扩展了 Stack。这个 class 应该是一堆 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 对象时得到它(请将 class 重命名为 MyStack
), 然后修改堆栈 ,然后使用迭代器,这不会' t fly 因为你在修改堆栈后使用迭代器。相反,您需要在 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。变量名称应全部以小写字母开头,而 class 名称应以大写字母开头。了解这一点并遵循这一点将使我们能够更好地理解您的代码,并使您能够更好地理解其他人的代码。