Стек не возвращается пустым, даже если у него нет объектов - PullRequest
0 голосов
/ 27 сентября 2011

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

static void pileOnto(int sBlock, int rBlock)
    {
        boolean flag = true;
        while ((!blocks[rBlock].empty()) && (flag))
        {
            retainer.push((Integer)blocks[sBlock].pop());
            if (((Integer)blocks[rBlock].peek()).intValue() == sBlock) {flag = false;}
        }
        while (((Integer)blocks[rBlock].peek()).intValue() != rBlock)
        {
            returnBlock(((Integer)blocks[rBlock].pop()).intValue());
        }
    }

Первый цикл while должен заканчиваться, когда стек пуст или когда последнее извлеченное целое число совпадает с sBlock. Проблема, которая у меня возникает, состоит в том, что block [rBlock] .empty () никогда не возвращает true, даже когда программа вылетает из-за попытки выскочить из блоков [rBlock], то есть в стеке не может быть ничего. Может кто-нибудь объяснить мне, что происходит?

1 Ответ

2 голосов
/ 27 сентября 2011

В первом цикле вы тестируете один стек (например, blocks[rBlock].empty()) и извлекаете другой стек (например, blocks[sBlock].pop()).

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