2017-04-05 14 views
1

我正在嘗試學習try-catch的用法,並且必須驗證輸入,以便用戶必須輸入1或2才能繼續。我相信我很接近,但似乎無法讓程序繼續,如果用戶輸入錯誤,如'3'或'2.12'。使用try-catch驗證輸入

這是我有:

String input = " "; 

try { 

     Scanner scan = new Scanner(System.in); 
     input = scan.next(); 

     Integer.parseInt(input); 

     if (!input.equals("1") && !input.equals("2")) { 

      System.out.println(); 
      System.out.println("Invalid imput! Please select '1' or '2':"); 
     } 

    } catch (InputMismatchException a) { 

     System.out.println(); 
     System.out.println("Invalid imput! Please select '1' or '2':"); 

    } 
+1

'如果{拋出新InputMismatchException時()(input.equals( 「1」)&& input.equals( 「2」)!);' –

+0

你拋出InputMismatchException時,從掃描儀輸入是來自不同預期類型(不是值)。爲您的scnerio投擲InputMismatchException相當濫用它。 –

回答

2

我不一定看到使用InputMismatchException作爲你的用例。相反,如果輸入與您所期望的不匹配,您可以記錄錯誤並僅提示用戶再次輸入。如果輸入的是不是一個實際的整數

[Integer#parseInt()][1]可以拋出異常。在你原來的代碼中,你永遠不會使用這個調用的結果,但我在我的回答中已經這樣做了。在這種情況下,使用try-catch塊確實是有意義的。

int result; 
while (true) { 
    try { 
     Scanner scan = new Scanner(System.in); 
     input = scan.next(); 
     result = Integer.parseInt(input); 
    } catch(Exception e) { 
     System.out.println("Could not parse input, please try again."); 
     continue; 
    } 

    if (result != 1 && result != 2) { 
     System.out.println("Invalid input! Please select '1' or '2':"); 
    } 
    else { 
     break; 
    } 
} 
+0

謝謝,這工作! – Kooba

1

你應該把你的條件能夠throw語句的catch語句獲取錯誤,代碼應該是這樣的:

String input = " "; 

try { 

    Scanner scan = new Scanner(System.in); 
    input = scan.next(); 

    Integer.parseInt(input); 

    if (!input.equals("1") && !input.equals("2")) { 

     System.out.println(); 
     System.out.println("Invalid imput! Please select '1' or '2':"); 
     throw new InputMismatchException(); 
    } 

} catch (InputMismatchException a) { 

    System.out.println(); 
    System.out.println("Invalid imput! Please select '1' or '2':"); 


} 
+0

這有幫助,但它不會讓程序繼續運行? – Kooba

+0

嘗試添加(輸入= scan.next();)後System.out.println(「輸入無效!請選擇'1'或'2':」); 在發表聲明 –