下面只是我的代码的一小部分,我试图理解为什么如果我在注释掉的代码行中添加它会引发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

最佳答案

我建议在尝试从堆栈或窥视中弹出任何东西之前,首先检查它是否为空。至少它可以防止异常。

09-25 20:20