0

私がやっていることは、ユーザーに月を入力するように頼むことです。とを入力してif、月が12を超えるelse ifか、が1を下回るかを指定し、ユーザーに月の入力を再度求めます。try and catchステートメントを使用して、ユーザーが文字列を入力しているのをキャッチし、月を入力するように指示しようとしています。私のコードの問題は、ユーザーが文字列を入力しているのをキャッチすると、コマンドラインが「月1〜12を入力してください」を繰り返し、ユーザーが月を再入力できるようにすることです。誰かが私が問題を抱えている問題を止めることができますか?

に挿入しようとしmonth.scan.nextInt()ましたcatchが、本当に混乱しているというエラーが表示されます。

import java.util.*;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

public class Price {
    public static void main(String[] args) {
        userInput();
    }

    public static void userInput() {
        Scanner scan = new Scanner(System.in);

        int month, day, year;
        boolean i = true;
        System.out.println("Please enter a month MM: ");
4

2 に答える 2

2

catchコードが句で無効な入力を消費しないため、エラーが発生します。プログラムはそれを何度も読み取ろうとするため、別の例外が発生します。

次のようにコードを変更すると、問題が解決するはずです。

catch(InputMismatchException imme) { 
    System.out.println("Please enter a month 1-12");
    scan.next(); // Ignore the invalid input
}

コードを他の人が読みやすいものにしたい場合は、その目的を説明する名前を考えてください。たとえばi、読み取りを続行するかどうかを決定するために変数が使用されます。名前を変更するとcontinueReading、ループが理解しやすくなります。

while (continueReading) ... // You do not need "== true" after a boolean variable
于 2013-03-23T00:25:26.950 に答える
0

ユーザーが指定された範囲外の月を入力した場合 (例: 23)、何が起こるかを観察します。

  1. -ifステートメントは評価されfalseelseブロックに移動します。
  2. メッセージが出力された後、ユーザーは再度テキストを入力します。
  3. ループが再び始まり、ユーザーはもう一度テキストを入力します。

したがって、チェックされていないテキストがあります。行を削除してみてください

month = scan.nextInt();

エラーメッセージを出力する呼び出しの後。

于 2013-03-23T00:25:29.767 に答える