0

プログラムのこの部分が機能しない理由がわかりません。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)ます。テスト目的で " " に変更してみましたが、list.pop()

4

2 に答える 2

2

スタックが空の場合、メソッドpeekは をスローします。EmptyStackExceptionスタックが空かどうかをテストするには、次のempty()メソッドを使用します。

while(!list.empty())

Stackまた、 「リスト」に名前を付けないでください。それは混乱を招く可能性があります。

于 2013-03-18T21:43:33.770 に答える
2

の場合peek()、それも を返すことができますEmptyStackException。代わりに次のコードを使用する必要があります。

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

何が起こっているかというと、peek は、あなたが想定している方法で空の要素を処理できないということです。の前にスタックが空でないことを確認する必要がありますpeek()

補足として、スタックに「リスト」という名前を付けるのは少し奇妙です。それはあなたの構造がList

于 2013-03-18T21:44:18.593 に答える