2017-01-15 1 views
0

Результатом этого является 4 3 2, и я не знаю почему. Как это работает для стеков/очередей/списков? Я не ищу лучшего выбора для этого кода (поскольку я уже знаю их), я просто хочу знать, как это работает.Стек с поведением

class Stack_1 { 
     public static void main(String [] args) { 
      Stack s = new Stack(); 
      List l= new LinkedList(); 
      for(int i = 0; i < 5; i++) 
      s.add(i); 
      for(int i = 0; i < l.size(); i++) 
      s.push(l.remove(i));//this does nothing 
      for(int i = 0; i < s.size(); i++) 
      System.out.print(" "+ s.pop()); 
     } 
     } 
+0

'for' работает независимо от структур данных. У вас нет ничего в 'List'' l' (размер '0', поэтому' i

+0

Это просто упражнение, в котором вы пытаетесь получить его результат (я не делал код), который (4 3 2), я не знаю, поскольку второй цикл ничего не делает, почему вывод не 4 3 2 1 0. – Supersoaker

ответ

1

Если вы заинтересованы в последнем цикле, он перебирает в 5 раз, так как вы собираетесь от 0 до размера стека (Если вы задаетесь вопросом о том, что первый цикл является тот, который заполняет его). На каждой итерации вы вызываете pop в стек, который удаляет и возвращает элемент сверху. Поэтому перед циклом ваш стек равен [4,3,2,1,0] после первой итерации [3,2,1,0], затем [2,1,0] и так далее. На каждой итерации вы также печатаете удаленное верхнее значение, поэтому вы видите его на консоли. После того, как ваш цикл завершится, ваш стек будет пустым. Надеюсь, поможет.

+0

Я решил это, каждый раз, когда цикл выдает число, стек становится меньше, поэтому к моменту i = 2, 2 печатается, и поэтому стек равен [1,0], поэтому, когда i = 3, он уже больше, чем стек, поэтому цикл останавливается. Спасибо за ваш ответ. – Supersoaker

1

Это интересное наблюдение. Если вы хотите, чтобы ваш код правильно вести себя попробовать следующее:

Stack s = new Stack(); 
    List l= new LinkedList(); 
    for(int i = 0; i < 5; i++) 
     s.add(i); 
    for(int i = 0; i < l.size(); i++) 
     s.push(l.remove(i));//this does nothing 
    int stackSize = s.size(); 
    for(int i = 0; i < stackSize; i++) 
     System.out.print(" "+ s.pop()); 

Вы хотите, чтобы ваш последний цикл, чтобы запустить столько раз, сколько элементов в стеке; однако размер стека постоянно изменяется с помощью pop(). Надеюсь это поможет.

Смежные вопросы