0

ユーザーに生年月日と生年月日を入力するように求めるこのコードを作成しました。いくつかのエラー チェックがあります。月は整数で、1 ~ 12 の範囲でなければなりません。年も同じ。現状では、while ループが 2 つあり、それらを組み合わせて何か問題が発生したときにエラー メッセージを表示する方法が思い浮かびません。「入力が間違っています: 再入力してください」というだけの場合は考えられますが、入力の何が問題なのかを示す必要があります。それは月で始まり、年を尋ねる前にその月が適切でなければなりません。年が間違っている場合は、年を再入力するように求められます。月まで戻るのではありません。

誰かに何かアイデアがあれば、私はそれを感謝します。それが整数かどうかをチェックするために使用されるクラスは、私が使用する必要があるクラスです。

while(!monthDone) {
           System.out.print("Enter Month of Birth: ");
           monthInput=scan.next();

           if(!(Type.isInteger(monthInput))) {
                  System.out.println("You need to enter an integer for month");
                  monthDone=false;
           } else {
                         MOB = Integer.valueOf(monthInput);

                         if (MOB<1 || MOB>12) {
                               System.out.println("Your month is out of range");
                               monthDone=false;
                         } else {
                               monthDone=true;
                         }

                         while(!yearDone) {
                                     System.out.print("Enter Year of Birth: ");
                                     yearInput=scan.next();
                                      if(!(Type.isInteger(yearInput))) {
                                             System.out.println("You need to enter an integer for year");
                                      }
                                      else {
                                             YOB = Integer.valueOf(yearInput);
                                             if (YOB<1912 || YOB>2012)  {
                                                    System.out.println("Your year is out of range");
                                                    yearDone=false;
                                                    }
                                                    else
                                                    yearDone=true;
                                             }
                                      }
                               }
                         }
         } // else closed
 } // Outer while close

whileループを投稿しているだけです。両方の場合monthDone && yearDone == true、次にそれらの年齢などを出力します。

4

2 に答える 2

2

これは、あまりネストせずにレイアウトする方法です。

Scanner scanner = new Scanner(System.in);
int month, year;
for (; ; scanner.nextLine()) {
    System.out.println("What is your month and year of birth as [1-12] [1900-2012]");
    if (!scanner.hasNextInt()) {
        System.out.println("Your month is not a number");
        continue;
    }
    month = scanner.nextInt();
    if (month < 1 || month > 12) {
        System.out.println("Your month is out of range");
        continue;
    }
    if (!scanner.hasNextInt()) {
        System.out.println("Your year is not a number");
        continue;
    }
    year = scanner.nextInt();
    if (year < 1900 || year > 2012) {
        System.out.println("Your year is out of range");
        continue;
    }
    break;
}
于 2012-09-26T12:13:22.337 に答える
2

これを次のように簡単に実行できます。

while (!monthDone) {
...
}

while (!yearDone) {
...
}

そのため、月の入力が適切に完了するまで、年の入力に進みません。これを月の日などに簡単に拡張できることがわかります。

于 2012-09-26T12:03:55.630 に答える