-1

基本的に、入力が整数かどうかを確認するには、次の while ループが必要です。配列を指しているため、小数を含めることはできません。入力された値が 10 進数の場合、ユーザーに再度プロンプトを表示する必要があります。問題は、このコードで while ループが始まる前に 2 つのプロンプトが表示されることです。何か案は?

      System.out.print("Enter month (valid values are from 1 to 12): ");
    Scanner monthScan = new Scanner(System.in);
    int monthInput = monthScan.nextInt();
    // If the month input is below 1 or greater than 12, prompt for another value
    while(monthInput<1 || monthInput>12 || !monthScan.hasNextInt())
    {
        System.out.print("Invalid value! Enter month (valid values are from 1 to 12): ");
        monthInput = new Scanner(System.in).nextInt();
    }

ありがとう

編集:現在の出力は次のようになります。

Enter month (valid values are from 1 to 12): 2
2

有効な値であるにもかかわらず、2 を 2 回入力しなければならなかったことに注目してください。

4

3 に答える 3

4

hasNextInt()を呼び出す前に、入力が整数であることを確認してくださいnextInt()。それ以外の場合は、ユーザーが非整数を入力するとnextInt()をスローします。InputMismatchException

int monthInput;

System.out.print("Enter month (valid values are from 1 to 12): ");
Scanner monthScan = new Scanner(System.in);

if (monthScan.hasNextInt()) {
    monthInput = monthScan.nextInt();
} else {
    monthScan.next();   // get the inputted non integer from scanner
    monthInput = 0;
}

// If the month input is below 1 or greater than 12, prompt for another value
while (monthInput < 1 || monthInput > 12) {
    System.out.print("Invalid value! Enter month (valid values are from 1 to 12): ");
    if (monthScan.hasNextInt()) {
        monthInput = monthScan.nextInt();
     } else {
       String dummy = monthScan.next();
       monthInput = 0;
    }
}
于 2013-08-01T06:39:42.073 に答える
2

このように確認できます

System.out.print("Enter month (valid values are from 1 to 12): ");
Scanner monthScan = new Scanner(System.in);

while(monthScan.hasNext())
{
   if(!monthScan.hasNextInt() && (monthInput<1 ||  monthInput>12))
   {
       System.out.print("Invalid value! Enter month (valid values are from 1 to 12):"); 
       continue;
   }

   // If the month input is below 1 or greater than 12, prompt for another value
  int monthInput = monthScan.nextInt();
  //do your logic here   
  break;//use the break after logic 

}

update有効な入力後に終了するように、ロジックの後に
使用します。break

于 2013-08-01T05:12:36.710 に答える