2016-11-13 73 views
1

我是新来的,我有一个问题。 我想实现一个比较器来比较顶部的两个堆栈。 的代码看起来像这样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。 您需要检查堆栈是空的调用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(); 
} 

或者,如果你想空栈来非空的经过:

@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