Как получить истинный порядок LIFO из стека? - PullRequest
0 голосов
/ 23 марта 2020

Как добавить значения int, а затем выполнить итерацию по стеку, получая порядок LIFO? Добавление 7 и 1 возвращает 7 и 1.

   public void calculate_10to99() {

    Stack romanNumeralsStack =  new Stack();
        romanNumeralsStack.add(7);
        romanNumeralsStack.add(1);

        Iterator value = romanNumeralsStack.iterator();

    while (value.hasNext()){
        System.out.println(value.next());
    }

Ответы [ 2 ]

2 голосов
/ 23 марта 2020

Сделайте это следующим образом:

public void calculate_10to99() {

    Stack<Integer> romanNumeralsStack =  new Stack<>();
        romanNumeralsStack.push(7);
        romanNumeralsStack.push(1);

    while (!romanNumeralsStack.empty()){
        System.out.println(romanNumeralsStack.pop());
    }
 }

Метод iterator () происходит из своего суперкласса Vector и просто возвращает все элементы по порядку, поэтому iterator.next () не дает LIFO

1 голос
/ 23 марта 2020

Вы используете итератор как

Iterator value = romanNumeralsStack.iterator();

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

Вы должны использовать другой метод, например. Это проверит, не является ли стек пустым, затем продолжит выталкивать элемент сверху, что делает его LIFO.

public static void calculate_10to99() {

        Stack romanNumeralsStack = new Stack();
        romanNumeralsStack.add(7);
        romanNumeralsStack.add(1);

        while (!romanNumeralsStack.isEmpty()){
            System.out.println(romanNumeralsStack.pop());

        }
    }
...