我想知道为什么我的代码不会捕获和EmptyStackException如果我在stackSize上放置0。
public static void main(String[] args){
Stack stack = new Stack();
System.out.println("How many numbers would you like to add to the stack? >> ");
Scanner scan = new Scanner(System.in);
int stackSize = scan.nextInt();
for(int i=0; i < stackSize; i++){
try {
System.out.print("Enter number: ");
int number = scan.nextInt();
stack.push(number);
} catch(EmptyStackException e){
System.out.print("Empty Stack");
}
}
System.out.println(stack);
}
答案 0 :(得分:4)
如果您在空堆栈上调用EmptyStackException
而不是Pop()
空堆栈中的元素,则抛出push
。
请参阅此代码:
try {
stack.pop();
} catch(EmptyStackException e){
System.out.print("Empty Stack");
}
答案 1 :(得分:1)
如果输入stackSize为0,则后续代码将不会被执行,因为stackSize为0
for(int i=0; i < stackSize; i++){
try {
System.out.print("Enter number: ");
int number = scan.nextInt();
stack.push(number);
} catch(EmptyStackException e){
System.out.print("Empty Stack");
}
}
并且只有在空Stack上调用Pop / Delete时才会抛出EmptyStackException。这里没有像你的代码中那样的东西。
答案 2 :(得分:0)
因为你没有调用可能抛出它的方法
push()
不会抛出任何异常
javadoc证实了这一点。
在EmptyStackException
中抛出Stack
的单个方法是检索/删除方法:
pop()
和peek()
这意味着API旨在确保客户端在尝试从中检索/删除内容之前检查Stack
是否为空。
记录EmptyStackException
:
由Stack类中的方法抛出,以指示堆栈是 空。
但这并不意味着它会在Stack
实例上的任何调用中抛出异常。
此外,无法在最初始终为空的堆栈中添加元素也没有任何意义。