没有捕获EmptyStackException

时间:2017-08-14 07:26:40

标签: java

我想知道为什么我的代码不会捕获和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);

}     

3 个答案:

答案 0 :(得分:4)

如果您在空堆栈上调用EmptyStackException而不是Pop()空堆栈中的元素,则抛出push

请参阅此代码:

   try {
        stack.pop();
   } catch(EmptyStackException e){
        System.out.print("Empty Stack");
   }

javadoc

答案 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实例上的任何调用中抛出异常。 此外,无法在最初始终为空的堆栈中添加元素也没有任何意义。