今天在写栈的操作的时候,在出栈方法哪里有一个问题。就是当栈空时的处理,因为栈空你没有数据可以返回,但是此方法的是有返回值的所以if里即使判断栈空也需要返回数据。
1、程序简单要求不高的时候用System.exit(1);就可以来解决此问题。
public int pop() {
if (isEmpty()) {
System.out.println("栈为空");
System.exit(1);// 栈为空时结束程序
// 因为此方法的返回值为int(有返回值)所以if里即使判断栈空也需要返回数据System.exit(1);就是用来解决这个问题的
}
return (array[top--]);
}
如果只是一个简单的栈的操作演示这样没有问题,但是当这只是一个程序的一部分时就会遇到下面的问题。看下面的System.out.println(“test”);就会因为程序的结束无法执行到。
public static void main(String[] args) {
ArrayStack stack = new ArrayStack();
for (int i = 0; i <stack.size+1; i++) {//stack.size就是栈的最大长度,加1之后就到栈空了,无法继续输出。
System.out.println(stack.pop());
}
System.out.println("test");// 测试System.exit(1);方法。如果System.exit(1);执行的话会直接结束程序,下面的代码无法运行。
}
2、另外一种解决办法
把pop方法改成返回Integer类型,没值的话返回null。然后你要输出之前判断是不是null,不是在输出
这样不用System.exit(1);也解决了
感谢学长的帮助