Ниже всего лишь один маленький кусок моего кода. Я пытаюсь понять, почему, если я добавлю в строку кода, который закомментирован, он выдает исключение EmptyStackException. Мне нужно добавить элемент вверху oneStack
в начало twoStack
, если в строке есть два нулевых значения (сгенерировано путем вызова items.getNextItem()
). Любое понимание того, почему это ломается? Или как я могу получить верхнее значение oneStack
, чтобы также быть верхним значением twoStack
в этот момент?Java Stack throwing EmptyStackException после нажатия
Я попытался поместить эту строку кода в if
, присвоив переменную значение oneStack.peek()
, но ничто из этого не помогло. Это почти как если бы одна прокомментированная строка опорожняла весь стек (??).
Основная точка: если в этой пронумерованной строке кода я обмениваю oneStack.peek()
с любым другим значением, он работает нормально. Так почему же он не работает с oneStack.peek()
?
oneStack.push(firstItem);
twoStack.push(firstItem);
nextItem = items.getNextItem();
oneStack.push(nextItem);
twoStack.push(nextItem);
while (!done) {
if (oneStack.peek() == null) {
oneStack.pop();
oneStack.pop();
twoStack.pop();
twoStack.push(oneStack.peek()); // the commented out line below causes this line to throw an EmptyStackException if uncommented.
newItem = items.getNextItem();
oneStack.push(nextItem);
if (oneStack.peek() == null) {
oneStack.pop();
twoStack.pop();
//twoStack.push(oneStack.peek()); // if I uncomment this it breaks, but this needs to happen for twoStack to be correct
} else {
twoStack.push(nextItem);
}
} else if (oneStack.peek() == targetItem) {
done = true;
} else {
nextItem = items.getNextItem();
oneStack.push(nextItem);
twoStack.push(nextItem);
}
Это так, что элементы генерируются:
item1, item2, item3, item4, Item5, NULL, NULL, item6, ст.7
В конце концов, это то, что слева от штабелей: oneStack: item1, item2, item6, ст.7
twoStack: item1, item2, item3, item4, Item5, item4, item6, ст.7 (item3 отсутствует)
twoStack должно быть: item1, item2, item3, item4, Item5, item4, item3, item6, ст.7
вы выходите из oneStack дважды, затем вы заглядываете. Сколько элементов имеет этот стек? – efekctive
@efekctive Мне нужно выскочить из oneStack дважды, чтобы удалить нулевое значение и элемент, который предшествует ему, чтобы начать с элемента до этого (извините за то, как это запутывает). В принципе, если генерируется нулевое значение, оно должно быть удалено из oneStack, и поэтому должен быть добавлен предыдущий элемент, а элемент до этого должен быть добавлен в twoStack. –
Хорошо. но уверены ли вы в размере стека в этот момент? Из вашего кода это может быть пустым или нет. каков размер до толчков? – efekctive