1

ユーザーの選択と入力の整数値を読み取りたいのですが、ユーザーが間違いを犯して代わりに読み取り不能な値を入力した場合に、例外によってプログラムがクラッシュすることは望ましくありません。この目的のために、try/catch シーケンスを含む while ループを作成しました。これは、無効なエントリが発生した場合に、ユーザーのエラーを説明する簡単なステートメントと、再試行を促すプロンプトを返すことを意図しています。

このコードでプログラムを実行すると、ユーザーの入力を読み取るために使用している Scanner オブジェクトは、ループの最初のパスでは正しく動作しているように見えますが、後続のパスでは、新しい入力を待たずに try ステートメントが自動的に失敗します。果てしない一連のエラー メッセージとプロンプトが表示されます。

これが私のコードです:

        Scanner tScan = new Scanner(System.in);
        int gChoice = 0;
        boolean gValid = false;
        while (!gValid)
        {
            try{
                gChoice += tScan.nextInt();
                gValid =true;
            } catch(Exception e){
                System.out.println("Input rejected. Please try again:");
            }
        }

プログラムは一時停止しgChoice += tScan.nextInt();、ユーザーがデータを入力し、tScan がそこから整数を取得しようとした場合にのみ続行します。整数が見つからない場合は、catch ステートメントに進み、ループの先頭に戻り、gValid がまだ true ではないことに注意し、try ステートメントに入り、行を読み取りますgChoice += tScan.nextInt();が、ユーザー入力のために一時停止せず、gChoice の割り当てに失敗します。 tScan からの整数、catch ステートメントなどに進みます。

私が間違っていること、またはこの問題を回避する方法についてアドバイスをいただければ幸いです。

編集:グレッグのおかげで解決しました。

4

1 に答える 1

1

スキャナからの不正な入力をクリアする必要があります。tScan.next();catch ブロックに追加してみてください。

于 2013-10-02T22:58:48.680 に答える