2017-10-24 13 views
3

whileループを使用して入力が整数かどうかをチェックします。最初に間違った型に遭遇しました。一度ループします。しかし、2回目から、ループ内のステートメントを2回実行します。私はすでにsc.nextLine()を使って前の入力をクリアしています。whileループを使用して入力を確認しますが、2回目から2回実行します

Pls ignoreこれは私がこの場合に取得する必要のある日付です。日付を取得する他の方法がありますプログラムは後で必要です。 私が知りたいのは、ループを2回目から2回実行してから新しい入力を行うことです。そしてこれを避ける方法は?

import java.util.Scanner; 

public class DayOfWeek { 

    static Scanner sc = new Scanner(System.in); 
    static int day, month, year; 

    public static void main(String[] args) { 

      System.out.println(""); 
      System.out.print("Please enter the DAY in numeric form: "); 
      day = getInput(); 
      System.out.print("Please enter the MONTH in numeric form: "); 
      month = getInput(); 
      System.out.print("Please enter the YEAR in numeric form: "); 
      year = getInput(); 

    } 

    public static int getInput() { 
    while (!sc.hasNextInt()) { 
     sc.nextLine(); 
     System.out.print("Please enter integer only. Try again: "); 
    } 
    return sc.nextInt(); 
    } 
} 

これは、コンソール上での結果である:

おかげ

必要であれば、私は、プログラム全体をコピーすることができますが、それは少し長いようだ... それは問題でgetInput()方法であり、

Please enter the DAY in numeric form: a 
Please enter integer only. Try again: 1 
Please enter the MONTH in numeric form: b 
Please enter integer only. Try again: Please enter integer only. Try again: 1 
Please enter the YEAR in numeric form: c 
Please enter integer only. Try again: Please enter integer only. Try again: 

答えて

1

整数値を読み取った後、[ENTER]System.inのままになるためです。 getInput()を開始すると、[ENTER]sc.hasNextInt()でテストされ、falseが返されます。したがって、2回目と3回目の入力に対して2回ループします。

下記の方法を変更してみてください。各入力ラウンドの最初の整数の後にユーザー入力を破棄します。

public static int getInput() { 
     while (!sc.hasNextInt()) 
     { 
      sc.nextLine(); 
      System.out.print("Please enter integer only. Try again: "); 
     } 
     int result = sc.nextInt(); 
     sc.nextLine(); 
     return result; 
    } 
関連する問題