Как вызвать метод toString () для всех объектов в стеке? - PullRequest
1 голос
/ 10 марта 2019

У меня есть класс (myObject), у которого есть собственный метод toString ().Затем я создал другой класс под названием myStack, и он расширяет стек.Предполагается, что этот класс является стеком объектов 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());

        }

    }

} 

Я не изменяю стек, пока перебираю его, поэтому не понимаю, почему выбрасывается исключение.

1 Ответ

3 голосов
/ 10 марта 2019

Ваша проблема , когда вы получаете итератор. Вы получаете это при создании объекта 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 . Имена переменных должны начинаться со строчной буквы, а имена классов - с заглавной. Изучение этого и последующее позволит нам лучше понять ваш код и позволит вам лучше понять код других.

...