停止查看空堆栈

Pod*_*odo 4 java stack compare

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

我遇到的问题是堆栈的最后一个元素。我做了最后一次弹出操作,但它试图查看空堆栈以确保它是有序的。由于那里什么都没有,所以我收到运行时错误。

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

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

return result;
}
Run Code Online (Sandbox Code Playgroud)

我尝试专门使用 Stack 来完成此操作,因此仅使用推送、弹出和查看。ArrayList 中没有任何内容。如何解决这个问题,同时仍然检查每个元素?

我尝试将 pop 存储在临时变量中,但这没有解决任何问题。不确定我希望什么

das*_*ght 5

问题是您需要两项,但empty()只检查一项。一旦调用,您需要在执行之前pop()进行另一个调用:empty()peek()

while(!s.empty()){
    // We know we have one element available; store it in "top"
    Integer top = s.pop();
    // If the next element is not available, exit 
    if (s.empty()) {
        break;
    }
    if(top < s.peek()){
        // Once result is set to "false", it never becomes "true"
        // so we might as well return now:
        return false;
    }
}
return true;
Run Code Online (Sandbox Code Playgroud)