gpt4 book ai didi

Java Stack 在推送后抛出 EmptyStackException

转载 作者:行者123 更新时间:2023-12-01 08:55:08 25 4
gpt4 key购买 nike

下面只是我的代码的一小块,我试图理解为什么如果我添加注释掉的代码行,它会抛出 EmptyStackException。如果一行中有两个空值(通过调用 items.getNextItem( 生成)),我需要将 oneStack 顶部的项目添加到 twoStack 的顶部))。任何洞察为什么会打破?或者我如何才能使 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);
}

这是生成项目的方式:

项目1、项目2、项目3、项目4、项目5、空、空、项目6、项目7

最后,这是堆栈剩下的内容:oneStack:项目1、项目2、项目6、项目7

twoStack:项目1、项目2、项目3、项目4、项目5、项目4、项目6、项目7(item3 缺失)

twoStack 应该是:item1、item2、item3、item4、item5、item4、item3、item6、item7

最佳答案

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

关于Java Stack 在推送后抛出 EmptyStackException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42080236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com