2016-11-13 9 views
1

私はここに新しいです、私は問題があります。 私はトップで2つのスタックを比較するコンパレータを実装しようとしています。 コードは、このEmptyStackExceptionコンパイラを実装しようとしています

class Comp implements Comparator<Stack<Integer>> { 
    @Override 
    public int compare(Stack<Integer> st1,Stack <Integer> st2) { 
     return st1.peek()-st2.peek(); 
    } 
} 

私はst1.peek()-st2.peek();java.util.EmptyStackExceptionを持って、私はなぜ知らないように見えます。たぶんあなたは私の問題のより良い実装で私を助けるでしょう。ありがとう!

+0

ポストあなたは空のスタックを並べ替えしようとしているように見える –

+0

がこのコンパレータを使用するコード... –

+0

はああ、私は間違いを発見した最小限のコードを投稿してください。私はスタックが空ではないと思ったが、その中のいくつかは空だった。皆さんありがとう! –

答えて

1

Stack.peekスタックが空のときにEmptyStackExceptionがスローされます。

@Override 
public int compare(Stack<Integer> st1, Stack<Integer> st2) { 
    if (st1.isEmpty() && st2.isEmpty()) { 
    return 0; 
    } 
    if (st1.isEmpty()) { 
    return -1; 
    } 
    if (st2.isEmpty()) { 
    return 1; 
    } 
    return st1.peek() - st2.peek(); 
} 

するか、したい場合は、空のスタックが来て: あなたがしたい場合は、空のスタックが空でないものの前に来て、例えばその上にpeek、 を呼び出す前に、スタックが空であるかどうかを確認する必要があります非空のものの後に:

@Override 
public int compare(Stack<Integer> st1, Stack<Integer> st2) { 
    if (st1.isEmpty() && st2.isEmpty()) { 
    return 0; 
    } 
    if (st1.isEmpty()) { 
    return 1; 
    } 
    if (st2.isEmpty()) { 
    return -1; 
    } 
    return st1.peek() - st2.peek(); 
} 
+0

両方のスタックが空の場合、両方のコンパレータは0を返す必要があります。 –

+0

@ OleV.V。確かに、良いコール、ありがとう! – janos

関連する問題