在while循环中调用堆栈

时间:2013-03-18 21:41:08

标签: java while-loop stack

我无法弄清楚为什么我的程序的这一部分不起作用,我偷看while循环并确认堆栈不是空的,但当我尝试在while循环内访问它时我得到此错误:

  

“线程中的异常”主“java.util.EmptyStackException at   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)”以进行测试,但一旦到达{{1}它就会中断}

2 个答案:

答案 0 :(得分:2)

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

while(!list.empty())

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

答案 1 :(得分:1)

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

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

正在发生的事情是,窥视不能像你想象的那样处理空元素。在peek()之前,您必须确保堆栈不为空。

作为旁注,命名Stack'list'有点奇怪。这意味着您的结构是List