2017-08-14 71 views
-3

我想知道为什么我的代码不会捕获和EmptyStackException如果我把0放在stackSize。没有捕获EmptyStackException

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

如果我把0放在stackSize上,你是什么意思? – Eran

+0

您希望抛出'EmptyStackException'的哪个操作? –

+0

在代码的开头。询问用户输入他们想要放入堆栈的数量。如果用户输入零作为答案,我认为它会捕获一个空堆栈异常。 –

回答

4

一个EmptyStackException抛出德恩你一个空栈上调用Pop()不是当你push到一个空栈的元素。如果你输入的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"); 
     } 

}

以下

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

javadoc

+0

谢谢。这澄清了一切!将接受这个答案。 –

+0

@CharlesDalid欢迎您 – Jens

1

看到这个代码而且,只有在调用Pop/Delet时才会引发EmptyStackException e在一个空的堆栈上。这里没有什么比如你的代码。

0

因为你没有调用一个可能会抛出它的方法。
push()不会引发任何异常。
javadoc确认它。

抛出EmptyStackExceptionStack单方法是检索/清除方法: pop()peek()

这意味着API的设计,以确保客户端检查Stack是不是要恢复之前的空/从中删除一些东西。
EmptyStackException被记载:

由Stack类中的方法抛出,以表明堆栈是 空。

但这并不意味着它会抛出任何在Stack实例上的调用的例外情况,在该实例中它是空的。
此外,如果不能在初始始终为空的堆栈中添加元素,则没有任何意义。