繁体   English   中英

初始化可以找到最小数量的堆栈。 Java的

[英]Initialize a stack which can find the minimum number. Java

我正在使用这样的代码,但是运行时会出错...系统返回java.util.EmptyStackException ..有人可以帮助我吗?

public class Solution {

    private Stack<Integer> val = new Stack<>();
    private Stack<Integer> stackMin = new Stack<>();
    Integer temp = null;

    public void push(int node) {
        this.val.push(node);
        if(this.stackMin == null){
            this.stackMin.push(node);
        }else if(node<=this.min()){
            this.stackMin.push(node);
        }
    }

    public void pop() {
        if (this.val==null) {
            throw new RuntimeException("Stack is empty.");
        }
        int value = this.val.pop();
        if(value == this.min()){
            this.stackMin.pop();
        }
    }

    public int top() {
        if(this.val!=null){
            return this.val.peek();
        }else{
            throw new RuntimeException("Stack is empty");
        }
    }

    public int min() {
        if(this.stackMin!=null){
            return this.stackMin.peek();
        }
       throw new RuntimeException("Stack is empty");
    }
}

我认为您应该使用stack.empty()而不是测试null值。 我更改了一些代码,但不会发生这种异常。

import java.util.Stack;

public class Main {
    public static void main(String[] args) {
        Main m1 = new Main();
        m1.push(2);
        m1.push(1);
        m1.push(3);
        System.out.println(m1.min());
    }
    private Stack<Integer> val = new Stack<>();
    private Stack<Integer> stackMin = new Stack<>();
    Integer temp = null;

    public void push(int node) {
        this.val.push(node);
        if(this.stackMin.empty()){
            this.stackMin.push(node);
        }else if(node<=this.min()){
            this.stackMin.push(node);
        }
    }

    public void pop() {
        if (!this.val.empty()) {
            throw new RuntimeException("Stack is empty.");
        }
        int value = this.val.pop();
        if(value == this.min()){
            this.stackMin.pop();
        }
    }

    public int top() {
        if(!this.val.empty()){
            return this.val.peek();
        }else{
            throw new RuntimeException("Stack is empty");
        }
    }

    public int min() {
        if(!this.stackMin.empty()){
            return this.stackMin.peek();
        }
        throw new RuntimeException("Stack is empty");
    }
}

测试输出最小值

/usr/lib/jvm/java-1.8.0-openjdk-amd64/bin/java Main
1

Process finished with exit code 0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM