2017-08-25 97 views
0

为什么如果有InputMismatchException,这段代码会继续循环? 当你输入一个零时,catch可以工作,但是如果你输入一个字符串,循环就会变成无限的。如果存在InputMismatchException,为什么此代码会继续循环?

import java.util.*; 
public class TryCatch 
{ 
    public static void main(String args[])  
    {  
     int age, age2, sum;   
     boolean repeat=true;   

     Scanner input = new Scanner(System.in);     
     do 
     {    
      try 
      { 
       System.out.println("Enter age: ");    
       age = input.nextInt();    
       System.out.print("Enter age2: ");    
       age2 = input.nextInt();     
       sum = age/age2;    
       System.out.print(sum);   
       repeat=false; 
      }   
      catch (Exception e) 
      {   
       System.out.println("Your error is "+e+"\n Try again");     
      }  
     }  
     while(repeat == true); 
    } 
} 
+1

来吧格式雅编写雅野蛮人 –

回答

0

澄清后,在编辑评论:

扫描仪认为,导致异常的价值,这就是为什么它是在下面的循环再次触发。

要获得你所追求的,你需要重新扫描的内容,并移动到下一个输入,所以改变你的catch块这样的:

 catch (Exception e) 
     {   
      System.out.println("Your error is "+e+"\n Try again"); 
      input.reset(); 
      input.next(); 
     }  

OLD:

因为当异常情况发生(不是输入中的int),程序将跳过try块中的其余代码(当然还有停止循环的部分),然后在catch块中执行代码,在该代码块中只输出错误消息。

在catch体中,您需要设置repeat=false;以使while指令停止重复。

+0

如果我把重复=假;在钓鱼体内,循环停止。问题是,它不会尝试再次接受值。我想要的是,如果有类型不匹配,它会显示错误,然后提示输入另一个输入,直到它变为有效。 – gendave

+0

ahhhh,现在它是有道理的。我会编辑我的答案,然后.. – BeerBaron

+0

谢谢。有效。还有其他解决方案,我发现。 age = Integer.parseInt(input.nextLine()); 2.在try体内创建Scanner类的输入对象。 – gendave

0

要正确得重数量,如何

int result = Integer.parseInt(number) 

您创建一个整数对象,如果你的输入可能是10A,就会抛出NumberFormatException

+0

“数字”代表什么?我看到了另一个解决我的问题的建议:age = Integer.parseInt(input.nextLine()); – gendave

+0

数字是从你的'扫描仪'的解析值 – 0x45

+0

所以“编号”是“输入”在我的代码?这是我认为解决它的代码:age = Integer.parseInt(input.nextLine());但仍然存在错误。输入年龄:6 输入AGE2岁:2 你的错误是java.lang.ArithmeticException:/零 再次 尝试输入年龄: – gendave