3

間違ったユーザー入力で例外処理を使用するのに助けが必要です。ユーザーを歓迎してからメインメニューに移動するテキストベースのゲームを作成しています。次に、ユーザーにオプションを伝え、ユーザー入力を探します。何らかの理由で、1 または 2 を入力するたびに、「入力が無効です。もう一度やり直してください」と表示され、選択肢に戻ります。どこが間違っているのか正確にはわかりません。誰かが私を助けてくれることを願っています。また、Mismatch Exception もキャッチしません。あなたが助けてくれることを願っています! ありがとう、シャンダン

   public static void main(String[] args) {



    System.out.println("Welcome to Spec Ops!");
    System.out.println("Please state your name:");
    Scanner name = new Scanner(System.in);
    String Name = name.next();

    System.out.println("Hello "+Name);
    mainMenu();

    }


public static void mainMenu() {

    System.out.println("1. Story Mode");
    System.out.println("2. Infinant Combat");



    Scanner input = new Scanner(System.in);



    Object Selection = input.nextInt();

    boolean validOption = true;
    Integer x;


    try {
    x = (Integer)Selection;
    } catch(ClassCastException cce){
        System.out.println("Your input is invalid, please try again");
        validOption = false;
    } catch(InputMismatchException ime){
        System.out.println("Your input is invalid, please try again");
        validOption = false;

    }


if(validOption) {
    System.out.println("Hello!");
}

else {
    mainMenu();
}

}

}

4

3 に答える 3

7

Scanner.nextInt は ant int を返すため、goObject selection = scanner.nextInt()を実行してから int にキャストする必要はありません。それint selection = scanner.nextInt()を try catch で囲むだけで、chatchesjava.util.InputMismatchExceptionが発生します。これは、ユーザーが文字ではなく文字を入力したときにスローされる例外です。番号

于 2012-12-20T19:10:00.460 に答える
1

コードを一時的に変更し、Pokemon 例外処理を使用して、スタック トレースをチェックして、実装する必要がある例外の種類を確認できます。

try {
    //do something
} catch(Exception e) {
    //Gotta catch 'em all!
    e.printStackTrace();
}

正確な例外がわかったら、いくつかのブレークポイントを設定し、それに応じてコードをリファクタリングします。

また、catch ブロック内のブール変数を変更してプログラムの流れを制御する必要はありません。

boolean isValidOption = false;
Integer x;

try {
     x = (Integer)Selection;
     isValidOption = true;
} catch...
于 2012-12-20T19:22:25.037 に答える
1

名前を読むと、scanner.next() を使用しています。これは行末文字を読み取らないため、scanner.nextInt() を呼び出すと、新しい行が読み取られ、int としての解析に失敗します。

名前の読み取りを scanner.nextLine() に変更する必要があります。ユーザーからの無効な int 入力を処理する場合は、nextInt への呼び出しを try ブロックに入れ、ClassCastException ではなく InputMismatchException をキャッチする必要があります。

于 2012-12-20T19:35:45.490 に答える