下面只是我的代码的一小部分,我试图理解为什么如果我在注释掉的代码行中添加它会引发EmptyStackException。如果一行中有两个空值(通过调用oneStack
生成),则需要将twoStack
顶部的项目添加到items.getNextItem()
的顶部。任何了解为何会中断?还是我怎样才能使oneStack
的最高值也成为twoStack
的最高值?
我尝试将这行代码放在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,item7
最后,剩下的就是堆栈了:
oneStack:item1,item2,item6,item7
twoStack:item1,item2,item3,item4,item5,item4,item6,item7
(缺少item3)
twoStack应该是:item1,item2,item3,item4,item5,item4,item3,item6,item7
最佳答案
我建议在尝试从堆栈或窥视中弹出任何东西之前,首先检查它是否为空。至少它可以防止异常。