Метод Java Stack (multipop) Начинающий Java - PullRequest
1 голос
/ 19 ноября 2009

Я пытаюсь написать метод Java, чтобы предварительно сформировать «multi-pop» из стека.

Он должен выполнить «всплывающую» операцию с stack объектом k количество раз. Это то, о чем я думаю, но это не совсем правильно. Любая помощь там?

public void multipop(int k) {
    while (top != null) {
        for (int i = 0; i <= k; i++) {
            this.pop();
        }
    }
}

Ответы [ 5 ]

6 голосов
/ 19 ноября 2009
  1. Вы выполняете цикл while, пока стек не будет исчерпан, что, вероятно, не то, что вы хотите. Если вы хотите проверить, есть ли элементы в стеке, используйте оператор if.
  2. В цикле вы выполняете итерацию от 0 до k включительно. Это означает, что если k = 3, вы проходите через 0, 1, 2 и 3 и, таким образом, вызываете this.pop() четыре раза.
  3. Даже если вы замените while на if, вы только убедитесь, что в стеке есть один элемент, но вы можете вызывать pop() несколько раз. Вы должны выполнить проверку внутри цикла или переместить проверку внутри pop().
  4. Отступ ужасен:)
3 голосов
/ 19 ноября 2009

Похоже на ошибку "один на один".

Если k=1, вы пройдете цикл с i=0 и i=1. Вы можете исправить это, изменив i<=k на i<k

3 голосов
/ 19 ноября 2009

Есть несколько проблем с этим:

  1. Скобки должны быть лучше отформатированы [первый взгляд заставляет меня поверить в несоответствие]
  2. Ваша проверка на нулевой регистр должна быть в середине цикла for: for (... ; i<=k && stack.canPop(); ...
  3. Вам нужен метод, чтобы убедиться, что есть элемент, который вы можете открыть.
  4. Как говорится в другом ответе, есть одна ошибка: если вы хотите открыть до K элементов, тогда условие должно быть i

Это должно привести к исключению или бесконечному циклу, потому что первый цикл гарантирует, что все еще есть переменная "top", которая не равна нулю, и затем направляет ее во второй цикл, который идет от 0: k.

0 голосов
/ 09 ноября 2013

1-й, он зацикливается (k + 1) раз, от 0 до k. 2-й, после нескольких попыток, возможно, что top равен нулю. Так что нужно постоянно проверять топ.

Это можно изменить, как показано ниже:

public void multipop (int k) {

    for (int i = 0; top != null && i < k; i++) {
        this.pop();
    }

}

0 голосов
/ 19 ноября 2009

Ты один на один. Вы хотите

 for(int i =0; i < k; i++)

Если есть больше проблем, вам нужно предоставить больше кода и вопросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...