1

私は例外に頭を悩ませようとしていますが、私が直面している問題は、9 から 99 の数字をユーザーに入力させるプログラムを作成する必要があるということです。この番号は、3 つの異なる例外を使用してエラー チェックする必要があります。

e1: 数値が範囲外 (200)

e2: 数値が整数 (double) 以外のデータ型です

e3: 入力が数値以外の別のデータ型 (char)

3 つすべてが機能するように if 構造にパターンを作成しようとしましたが、e2 と e3 を区別することができません。デフォルトは常に e2 です。これは 2 つの例外を除いて私が持っているものですが、3 番目の実装方法を理解するのを助けていただければ幸いです。ありがとうございました。

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    boolean tryAgain = true;
  do {
       try {
            System.out.println("Please enter an integer between 9 and 99: ");

            int inInt = input.nextInt();

            if (inInt >= 9 && inInt <= 99){
                System.out.println("Thank you.  Initialization completed.");
                tryAgain = false;
            }
            else if (inInt < 9 || inInt > 99){
                throw new NumberFormatException("Integer is out of range.");
            }
        }
        catch (NumberFormatException e1) { // Range check
            System.out.println("* The number you entered is not between 9 and 99.  Try again.");
            System.out.println();
            input.nextLine();
        }
       catch (InputMismatchException e2) { // Something other than a number
            System.out.println("* You did not enter an integer.  Try again.");
            System.out.println();
            input.nextLine();
        }
    } while(tryAgain);
}

}

これが私が今得た出力です:

9 ~ 99 の整数を入力してください: 2

  • 入力した数字は 9 から 99 の間ではありません。もう一度やり直してください。

9 ~ 99 の整数を入力してください: f

  • 整数が入力されていません。再試行。

9 ~ 99 の整数を入力してください: 88

ありがとうございました。初期化が完了しました。

https://www.ideone.com/ZiOpGH

4

2 に答える 2

1

3 つの状況を検出する必要がある場合は、3 つのロジック セットが必要です。

  1. 入力した文字が有効な数値かどうかを確認してください。
  2. 入力した数値が整数であることを確認してください。
  3. 入力した数値が下限と上限の間にあることを確認してください。

そして、ほとんどの場合、それらをこの順序でチェックする必要があります。

Scanner には、hasXXX読み取ろうとしている文字が特定のパターンに一致するかどうかを確認するための便利なメソッドがあります。

于 2013-03-18T02:21:04.837 に答える
1

で、 (またはどちらがより一般的かわからない...) が true かどうかcatch (InputMismatchException e2)をテストします。そうである場合、「ユーザーが double を入力した」場合と「ユーザーが非数値型を入力した」場合を区別できます。input.hasNextDouble()input.hasNextFloat()

于 2013-03-18T01:28:09.820 に答える