2012-01-08 290 views
2

我正在編寫命令行程序,並希望讓用戶輸入有效的年齡(整數)。通過使用掃描儀類,我有這樣的事情:檢查用戶是否輸入整數

int getAge() { 
    Scanner = new Scanner(System.in); 
    int age; 
    boolean isValid = false; 

    while(!isValid) { 
     System.out.println("Please enter your age"); 
     if (myScanner.hasNext()) { 
     if (myScanner.hasNextInt()) { 
      age = myScanner.nextInt(); 
      isValid = true; 
     } else { 
      System.out.println("Please enter an integer"); 
     } 
     } 
    } 

    return age; 
} 

的問題是,雖然在循環它不斷讀取輸入,而不必等待新的價值。我怎樣才能解決這個問題?

回答

2

您沒有讀取您的else路徑中的任何令牌,因此一次又一次地處理相同的輸入。只需添加以下行

myScanner.next(); 

裏面的else -block。

0

你也可以使用像這樣的東西。要使用BufferedReader讀取整行,然後解析字符串中的整數並捕獲可能發生的任何異常。

InputStreamReader isr = new InputStreamReader(System.in); 
BufferedReader br = new BufferedReader(isr); 
String s = br.readLine(); 
int intVal; 
try { 
    intVal = Integer.parseInt(s); 
} 
catch(NumberFormatException nfe) { 
    //Do Something 
} 

你可以把它放在循環中。 (是的,我意識到它不使用掃描儀...只是想顯示一種替代方法。)