2012-01-08 12 views
2

私はコマンドラインプログラムを作成しており、有効な年齢(整数)を入力するようにしたいと考えています。 Scannerクラスを使用することにより、私はこのような何かを持っている:ユーザーが整数を入力したことを確認する

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パスでトークンを読み取っていないため、同じ入力を何度も何度も処理しています。ただ、else - ブロック内の次の行

myScanner.next(); 

を追加します。

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 
} 

これをループ内に配置できます。 (はい、スキャナを使用していないことを認識しています...代わりの方法を示したかっただけです)

関連する問題