Проход по стеку с использованием традиционного цикла for в Java - PullRequest
0 голосов
/ 02 декабря 2019

Почему это не работает:

У меня в стеке два предмета, но он проходит цикл один раз

for (int i = 0; i < stack.size(); i++) {
            String[] values = stack.pop().trim().replaceAll(" ", "").split("/");
            String[] moveList = values[0].trim().replaceAll(" ", "").split("-");
}

Ответы [ 2 ]

1 голос
/ 02 декабря 2019

В объекте Stack метод pop() удаляет объект в верхней части стека и возвращает объект как результат. Таким образом, при первом выполнении операция stack.pop() удаляет первый элемент из стека, поэтому размер уменьшается с 2 до 1. На следующей итерации цикла " для " переменная i имеет значение 1, а условие " для " i<stack.size() не проверяется, поэтомуцикл " for " завершается. Вот почему он проходит цикл только один раз. Было бы лучше проверить, не является ли стек пустым как условие цикла.

0 голосов
/ 02 декабря 2019

Вместо использования цикла for вы должны использовать цикл while для перебора всех элементов.

Пример:

   while(!stack.empty()){
       String[] values = stack.pop().trim().replaceAll(" ", "").split("/");
       String[] moveList = values[0].trim().replaceAll(" ", "").split("-");
   }

...