2013-03-18 66 views
0

我無法弄清楚爲什麼我的程序的這部分不能工作,我在while循環之外偷看並確認堆棧不是空的,但是當我嘗試訪問它時while循環中我得到這個錯誤:調用一個while循環內的堆棧

"Exception in thread "main" java.util.EmptyStackException at java.util.Stack.peek(Unknown Source)"

這裏的代碼中的相關部分

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

還有更多太while循環,但它打破一次list.peek被稱爲括號裏面,我試圖改變它以「while(test != null)」作爲測試目的,但一旦得到就會中斷到list.pop()

+2

'list.empty()'應該完成這項工作。 – Mordechai 2013-03-18 21:42:42

+0

「list」的聲明是什麼? – 2013-03-18 21:44:17

+0

我會在哪裏使用list.empty()?並且聲明爲「public Stack list = new Stack ();」 – 2013-03-18 21:48:23

回答

2

如果堆棧爲空,peek方法將拋出EmptyStackException。爲了測試是否堆棧是空的,使用empty()方法:

while(!list.empty()) 

而且,不要對你Stack「清單」;這可能會讓人困惑。

+0

這個循環裏面不是空的,謝謝!哈哈,這有點馬虎 – 2013-03-18 21:55:36

1

當你peek(),那也可以返回EmptyStackException。你應該使用這個代碼:

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

發生了什麼事是偷看不能處理空元素假定你是它能方式。在你peek()之前,你必須確保堆棧不是空的。

作爲一個側面說明,命名堆棧'列表'有點奇怪。這意味着你的結構是一個List