2017-06-03 34 views
0

我正在使用这样的代码,但运行时出现错误......系统返回java.util.EmptyStackException..Can任何人都可以帮助我?初始化可以找到最小数量的堆栈。 Java

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"); 
    } 
} 
+0

在什么叫你得到这个异常? – Mureinik

+0

找到错误...我应该使用isEmpty()来检查堆栈是否为空... – Akrisllen

回答

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 
相关问题