2017-04-23 42 views
-2
import java.util.InputMismatchException; import java.util.Scanner; 

public static void main(String[] args) { 
     Scanner sc = new Scanner(System.in); 
     boolean nvalid = true; // boolean to get out of do while when user input number 
     int a = 0; 
     System.out.println("enter number a"); 
     do { 
      try { 
       a = sc.nextInt(); 
       nvalid = true; 
      } catch (InputMismatchException e) { 
       System.out.println("please enter number only"); 
       nvalid = false; //make the boolean false so do while will let user enter number again. 
      } 
     } while (nvalid == false); 
     System.out.println("out of do while"); 
    } 

嗨,我正在使用netbeans练习java异常,我想捕捉异常,当用户不输入数字。捕捉异常(char到int)导致循环无限

上面的代码会导致无限循环,并阻止用户为变量a输入值。

回答

3

那么你是成功捕捉异常。这不是问题。

真正的问题是由于发生了什么而导致发生异常。如果nextInt()无法解析整数,它会放回它所查看的所有字符。

因此......当它再次绕过循环时,您的代码尝试读取与以前完全相同的字符。这将失败,并失败,并失败...

解决方案:使用nextLine()跳过“坏的输入”,然后要求用户再试一次。你可以把它放在异常的catch块中。


注意,这是一个坏主意/坏习惯:

.... while (nvalid == false); 

你不应该使用==测试一个布尔值是真还是假。代之以:

.... while (!nvalid); 
+0

“break”可以进一步简化这一点。 – pvg

+0

这是真的。然而,我将重点放在我认为对于Nhan学习这件事最重要的事情上。 –

+0

他不应该主要学习做研究吗?他显然没有。 – Tom