2015-12-21 66 views
3

我正在练习异常处理,并且或多或少地掌握了基本概念。继续提示,直到标准满足

我一直对如何通过提示用户输入其满足的具体标准,尽管通过使用循环

我有一个要求用户输入一个值,这个特定的代码捕获异常值,以继续执行搜索了在一个范围内并且有一个异常处理来捕捉一个字符串是否被输入。但是,程序在打印出异常处理后停止执行。

任何想法如何实现循环或任何其他方法,可以在异常处理后继续执行程序?

Scanner scanner = new Scanner(System.in); 
int num = 0; 
try 
{ 
    System.out.print("Please enter a number between 1 to 50 : "); 
    num = scanner.nextInt(); 
} 
catch (InputMismatchException e) { 
    System.out.println("Not a number"); 
    return; 
} 

while (num > 50 || num < 1) { 
    System.out.print("Out of range. Enter a number between 1 to 50 : "); 
    num = scanner.nextInt(); 
} 

System.out.println("The number is : " + num); 
+0

您不应该使用异常来处理无效(即非int)输入:扫描器具有用于此特定目的的'hasNextInt'方法。 –

回答

0

使用此:

Scanner scanner = new Scanner(System.in); 
boolean isInputValid = false; // input flag, valid = true/invalid = false 
int num = 0; 

while(!isInputValid) { 
    try 
    { 
     System.out.print("Please enter a number between 1 to 50 : "); 
     num = scanner.nextInt(); 

     // Input is a valid integer 
     if (!(num > 0 && num < 51)) { // input out of range 
      System.out.print("Out of range."); 
     } 
     else 
      isInputValid = true; // input valid, proceed & break loop 
    } 
    catch (InputMismatchException ex) { // input not an integer 
     System.out.println("Not a number"); 
     scanner.next(); 
    } 
    catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
} 

System.out.println("The number is : " + num); 
+0

当我输入一个字符串时,我得到一个无限循环 – Rind

+0

你期待一个'int'的权利?所以循环不会停止,除非你得到一个整数作为输入 –

+0

然而,只有int才能被输入,例如一个字符串被输入,它立即给出一个无限循环。 – Rind

3

异常应如何处理特殊情况下,即情况下,你无法事先预料到的。既然你绝对可以预见的是,用户可以输入无效的输入,你可以处理无效的输入没有任何异常处理:

Scanner scanner = new Scanner(System.in); 
    int num = 0; 
    while (num > 50 || num < 1) { 
     System.out.print("\nPlease enter a number between 1 to 50 : "); 
     while (!scanner.hasNextInt()) { 
      scanner.next(); // discard non-integer inputs 
      System.out.print("\nPlease enter a number between 1 to 50 : "); 
     } 
     num = scanner.nextInt(); 
    } 
    System.out.println("You entered " + num); 

输出示例:

Please enter a number between 1 to 50 : -1 

Please enter a number between 1 to 50 : 53 

Please enter a number between 1 to 50 : ff 

Please enter a number between 1 to 50 : rr rr ff 

Please enter a number between 1 to 50 : 
Please enter a number between 1 to 50 : 
Please enter a number between 1 to 50 : 13 
You entered 13 

注意,该代码比要短得多版本使用异常处理。

相关问题