当前位置: 首页 > 知识库问答 >
问题:

在push后抛出EmptyStackException的

齐鸿光
2023-03-14

下面只是我的一小块代码,我试图理解为什么如果我添加了注释掉的代码行,它会抛出一个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,null,null,项目6,项目7

twoStack应为:item1,item2,item3,item4,item5,item4,item3,item6,item7

共有1个答案

斜俊
2023-03-14

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

 类似资料:
  • 我是Git的新手(刚开始2天)。我正在尝试创建一个项目来实践我从这里学到的基本命令。 到目前为止我在哪里: > [success]创建一个新的公共git项目(因为我以前尝试过私有和内部但无法克隆它,我也不知道为什么)。给你。 将添加到项目中。 [成功]创建名为的新分支。 [成功]在我的本地文件夹中,使用以下命令设置全局和: null 所以我确实输入了我的凭据(与我登录gitlab.com时使用的用

  • 我的目标是让我的容器数据库进入挂载模式,以执行系统更改语句来启用闪回功能。 为闪回事务配置数据库 环境:OS Win 8.1 64位,Oracle 12c(12.1.0.2.0)64位 我验证了我的侦听器和db服务都在运行。 Listener.log 9月08 13:31:42 2015日星期二系统参数文件为C:\OracleServer\Products\12.1.0\dbhome_1\Netw

  • 我目前有以下示例代码,我试图将OutputStream转换为InputStream,这是我从http://blog.ostermiller.org/convert-java-outputStream-InputStream中的获得的想法 但这里我的问题是,save方法可能会抛出IOException,我希望捕获它,并将其作为getInputStream方法的一部分重新抛出。 我读过如何从线程捕捉异

  • 资料: 安装的所有扩展: 已尝试运行: 错误日志中的错误: PHP分析错误:语法错误,第50行的/home/username/laravel/public/index.PHP中出现意外的“class”(T_类),需要标识符(T_字符串)或变量(T_变量)或“{”或“$” 访问站点时:HTTP错误500 有什么想法吗? 编辑1: 公共/索引的内容。php 我是如何安装laravel的: 通过SSH登

  • 我在服务器上托管了一个spring应用程序(Tomcat 8.5)。如果没有人使用它,它就会闲置。我已经知道,如果数据库处于空闲状态8小时(MySQL的默认超时),就会发生超时。正如在Spring Autoreconnect and Connection lost过夜帖子中提到的,我已经尝试了这里提供的解决方案。我尝试过配置应用程序。但这并不能解决问题。 (PS:除了Spring应用程序中的app