栈的出栈方法pop和peek在栈不为空时会返回栈顶元素。但是当栈为空时会报出java.lang.ArrayIndexOutOfBoundsException: -1的错误信息。
以下是普通栈的实现
public class Stack {
private static ArrayList list = new ArrayList<>();
public void push(Object o){
list.add(o);
}
public int pop(){
Object o = list.get(list.size() - 1);
list.remove(o);
return Integer.parseInt(String.valueOf(o));
}
public int peek(){
Object o = list.get(list.size() - 1);
return Integer.parseInt(String.valueOf(o));
}
public boolean isEmpty(){
return list.isEmpty();
}
}
当空栈时,很明显的list.size()-1越界了。可是pop和peek方法需要返回值,就算你用try catch去捕获异常或者用if else还是无法正确返回。
如果程序要求不高时用System.exit(1)解决问题。
public int pop(){
//栈为空时结束程序
if(isEmpty()){
System.exit(1);
}
Object o = list.get(list.size() - 1);
list.remove(o);
return Integer.parseInt(String.valueOf(o));
}
如果只是单一的程序可以用结束程序的方法解决,若是这只是其他程序的一部分时,程序无法继续下去。
所以下面是第二种解决方法,修改pop的方法返回值类型为Integer这样返回结果就可以为null了。
public Integer pop(){
if(isEmpty()){
return null;
}
Object o = list.get(list.size() - 1);
list.remove(o);
return Integer.parseInt(String.valueOf(o));
}