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