【问题标题】:calling on a stack inside a while loop在while循环内调用堆栈
【发布时间】:2013-03-18 21:41:08
【问题描述】:

我不知道为什么我的程序的这部分不起作用,我在 while 循环外查看并确认堆栈不为空,但是当我尝试在 while 循环内访问它时出现此错误:

“线程“主”中的异常 java.util.EmptyStackException 在 java.util.Stack.peek(未知来源)"

这是相关的代码

String test = list.peek();
    System.out.println(test);
    while(list.peek() != null)
    {
        temp = list.pop();

还有更多的while循环,但是一旦在括号内调用list.peek就会中断,我尝试将其更改为“while(test != null)”以进行测试,但一旦到达list.pop()就会中断

【问题讨论】:

  • list.empty() 应该可以完成这项工作。
  • list 的声明是什么?
  • 我应该在哪里使用 list.empty()?声明是“public Stack list = new Stack();”
  • 给出的错误信息表明listStack
  • 看看我(和 rgettman 的)答案,他们向您展示了如何使用 empty()。这个想法是,对于循环的每次迭代,在循环开始之前检查堆栈是否为空。这样你就知道循环内的堆栈不是空的

标签: java while-loop stack


【解决方案1】:

如果堆栈为空,peek 方法将抛出 EmptyStackException。要测试堆栈是否为空,请使用empty() 方法:

while(!list.empty())

另外,不要将您的Stack 命名为“列表”;这可能会令人困惑。

【讨论】:

    【解决方案2】:

    当您peek() 时,也可以返回EmptyStackException。您应该改用此代码:

    while(!list.empty()) {
        temp = list.pop();
    }  
    

    发生的情况是 peek 无法像您假设的那样处理空元素。在peek() 之前,您必须确保堆栈不为空。

    作为旁注,将您的堆栈命名为“列表”有点奇怪。这意味着您的结构是List

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-19
      • 2012-10-13
      • 2012-03-16
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多