2012-11-19 70 views
1

我需要讓用戶從控制檯輸入一個肯定的非零整數,我將在該程序中用作產品編號。在輸入驗證期間使用Scanner類測試空白輸入

如果我輸入任何非整數值,程序正確進入while循環。

如果我輸入一個0或一個負整數,程序會正確地拋出異常(我在其他地方捕獲並處理)。

當我只是按下回車鍵(或行尾字符)似乎程序只是把控制檯放到另一行。我希望它進入while循環來顯示錯誤消息。我認爲原因是hasNextInt()將等待,直到令牌不是行尾字符輸入。

private static void validateProductNumber() throws InvalidProductNumberException { 
    Scanner keyboard = new Scanner(System.in); 
    int number; 
    while(!keyboard.hasNextInt()) { 
     System.out.println("Number must be an integer. Try again. "); 
     System.out.println("Enter a new number: "); 
     keyboard.next(); 
    } 
    number = keyboard.nextInt(); 
    if (number <= 0) 
     throw new InvalidProductNumberException(); 
    newNumber = number; 
} 

是否有另一種方式,我可以用Scanner類實現我的輸入驗證,以便它可以在所有情況下正常工作?

+0

Bhesh古隆的解決方案完美地工作。如果有人知道另一種方式,我仍然會感興趣。 – user1834529

回答

0

你可以改變你的循環如下:

while(true) {   
    try { 
     System.out.println("Enter a new number: "); 
     //read the line and parse it 
     number = Integer.parseInt(keyboard.nextLine()); 
     break; //break the loop if the input is a valid integer 
    } catch(Exception ex) { 
     //print the error message if the input is incorrect 
     System.out.println("Number must be an integer. Try again. "); 
    } 
} 
if (number <= 0) 
//... 
+0

這工作完美!我一直試圖自己解決這個問題將近一個小時。非常感謝。 – user1834529

+0

不客氣。 –