
以下のクラスQ1のように,0<a<6である整数の入力をScannerで求めたとき,aという文字を入力してInputMismatchExceptionを発生させたところ,再度入力を迫られずに無限ループと化してしまいました.
再度入力を迫るように適切に書き換えるにはどうすればいいのでしょうか.
自分は,while()での処理が悪さをしているような気がするのですが...
*************************************
import java.util.Scanner;
public class Q1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = 0;
do {
try {
System.out.print("Input an integer less than 6 and greater than 0:");
a = sc.nextInt();
} catch (InputMismatchException e) {
e.printStackTrace();
}
} while (a <= 0 || a >= 6);
System.out.println(a);
}
}
***************************************
No.2ベストアンサー
- 回答日時:
> e.printStackTrace();
> の後にa=sc.nextInt()を加えるのでしょうか?
> これでは例外発生後に終了してしまいました.
> a=next();ではint aに矛盾してしまいますし.
InputMismatchExceptionのcatchブロックに、
sc.next();
を加えると良いと思います。
#e.printStackTrace();
#の前でも後でも構いません。
InputMismatchExceptionのcatchブロックが実行されるとき、
aに値は代入されず繰り返し条件は真となるので、
この場合、特にaに何か代入する必要はありません。
No.1
- 回答日時:
'a'という入力が捨てられないので、ループして(Scannerの)nextIntメソッドで再び例外が発生することを繰り返します。
InputMismatchExceptionが発生したとき、(Scannerの)nextメソッドで入力を捨てるようにすると良いと思います。
この回答への補足
ご回答ありがとうございます.
>'a'という入力が捨てられないので、ループして(Scannerの)nextIntメソッドで再び例外が発生することを繰り返します。
確かにそうですね.どうやってこの`a'を消そうかわかりませんでした.
>InputMismatchExceptionが発生したとき、(Scannerの)nextメソッドで入力を捨てるようにすると良いと思います。
これはどういうことでしょうか.
e.printStackTrace();
の後にa=sc.nextInt()を加えるのでしょうか?
これでは例外発生後に終了してしまいました.
a=next();ではint aに矛盾してしまいますし.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
String型の日付(2005/11/25)の...
-
Timestamp型への変換について(J...
-
Excelでのエラー
-
VC++におけるCStringの変換
-
SQLException getNextException()
-
VB.NETで16進数が正しいかどう...
-
ヒグマを撃退
-
JSPで<SELECT>の中にDBから持っ...
-
VB.NETでフォーム上にExcelのよ...
-
ASPX(C#)で別ファイルで自分で...
-
Excelで =EMBED("Acrobat Docu...
-
命名規約は連番でいいのか?
-
Excel : OpenTextメソッドが正...
-
ウィンドウを最前面にできません
-
エクセルVBAで、条件に一致する...
-
エクセルVBAで、ユーザーフォー...
-
レコード件数の表示
-
インスタンス参照でアクセスで...
-
配列の重複する値とその個数を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
VB.Net Object型 空かどうか
-
【JAVA】与えられた金額を貨幣...
-
C#の捕捉されない例外処理の対...
-
String型の日付(2005/11/25)の...
-
C# マルチスレッドにおける例外...
-
Timestamp型への変換について(J...
-
時間の取得
-
連続する「\\」をひとつの「\\...
-
VBA Evaluate関数 型が一致しま...
-
ファイルダイアログを開いた時...
-
nullで、return出来るのはどん...
-
数字か文字列かを判定する関数
-
全角スペースのチェックについて
-
VB.NETで16進数が正しいかどう...
-
文字列からダブルクオートの削除
-
初回例外
-
C# UriFormatExceptionの回避
-
0除算の例外処理ができない!!...
-
例外ってIf文の中に入れますか...
おすすめ情報