2015-12-21 72 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 

注意,該代碼比要短得多版本使用異常處理。

相關問題