停止在空堆栈偷看

时间:2016-10-28 00:25:31

标签: java stack compare

我通过弹出它来检查堆栈是否已经排序,并将pop与expek进行比较。如果弹出大于窥视,我们知道这两个元素是有序的。只要堆栈不空,我就会运行这个循环。

我遇到的问题是堆栈的最后一个元素。我做了我最后的流行音乐,但它试图偷看一个空的堆栈,以确保它有序。由于那里什么也没有,我得到一个运行时错误。

public static boolean isSorted(Stack<Integer> s){
boolean result = true;

while(!s.empty()){
    if(s.pop() < s.peek()){
        result = false;
    }
}

return result;
}

我试图用Stack专门做这个,所以只使用push pop和peek。没有来自ArrayList。我怎样才能解决这个问题,同时还要检查每个元素?

我尝试将pop存储在一个临时变量中,但没有修复任何内容。不知道我希望的是什么

3 个答案:

答案 0 :(得分:2)

问题是您需要两个项目,但myseries.to_dict()只检查一个项目。致电empty()后,您需要在执行pop()之前再进行一次empty()来电:

peek()

答案 1 :(得分:0)

必须,pop删除最后一个元素,如果堆栈为空,则peek抛出EmptyStackException

public static boolean isSorted(Stack<Integer> s){
boolean result = true;
while(!s.empty()){
    if(s.size() == 1)
        return result;
    if(s.pop() < s.peek()){
        result = false;
    }
}

return result;
}

答案 2 :(得分:0)

一种方法是明确检查尺寸:

while(s.size() > 1){ // ok, we have enough elements in the stack
    if (s.pop() < s.peek()) {
        result = false;
        break; // no need to proceed, we already know it's not sorted.
    }
}