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

时间:2017-06-03 15:39:37

标签: java stack

我正在使用这样的代码但运行时出错...系统返回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");
    }
}

1 个答案:

答案 0 :(得分:0)

我认为你应该使用stack.empty()而不是测试空值。我改变了一些代码,这样的异常不会发生。

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