以下のクラス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.1
- 回答日時:
'a'という入力が捨てられないので、ループして(Scannerの)nextIntメソッドで再び例外が発生することを繰り返します。
InputMismatchExceptionが発生したとき、(Scannerの)nextメソッドで入力を捨てるようにすると良いと思います。
この回答への補足
ご回答ありがとうございます.
>'a'という入力が捨てられないので、ループして(Scannerの)nextIntメソッドで再び例外が発生することを繰り返します。
確かにそうですね.どうやってこの`a'を消そうかわかりませんでした.
>InputMismatchExceptionが発生したとき、(Scannerの)nextメソッドで入力を捨てるようにすると良いと思います。
これはどういうことでしょうか.
e.printStackTrace();
の後にa=sc.nextInt()を加えるのでしょうか?
これでは例外発生後に終了してしまいました.
a=next();ではint aに矛盾してしまいますし.
No.2ベストアンサー
- 回答日時:
> e.printStackTrace();
> の後にa=sc.nextInt()を加えるのでしょうか?
> これでは例外発生後に終了してしまいました.
> a=next();ではint aに矛盾してしまいますし.
InputMismatchExceptionのcatchブロックに、
sc.next();
を加えると良いと思います。
#e.printStackTrace();
#の前でも後でも構いません。
InputMismatchExceptionのcatchブロックが実行されるとき、
aに値は代入されず繰り返し条件は真となるので、
この場合、特にaに何か代入する必要はありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Java Java 配列<選挙> 4 2023/07/31 15:07
- Java java final 1 2022/06/10 22:49
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java Javaの問題なのですが、「3文字以上の英数字文字列を入力し、文字列の中に文字(9)が出てくるまでの 1 2023/06/06 18:55
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Ruby プログラミング 3 2023/06/09 14:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
C# UriFormatExceptionの回避
-
String型の日付(2005/11/25)の...
-
Excelでのエラー
-
Bean→JSPでの文字化け
-
VB.Net Object型 空かどうか
-
数字か文字列かを判定する関数
-
Javaで文字列をゼロ埋め(ゼロパ...
-
VB.NETで16進数が正しいかどう...
-
タトゥーや墨を入れる人の共通点
-
Timestamp型への変換について(J...
-
時間の取得
-
文字列からダブルクオートの削除
-
メソッドが存在するかどうかの...
-
エクセルVBAで、条件に一致する...
-
オブジェクト指向プログラミン...
-
生成したインスタンスを削除す...
-
変数名の付け方
-
servletからjspへオブジェクト...
-
レコード件数の表示
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
【JAVA】与えられた金額を貨幣...
-
連続する「\\」をひとつの「\\...
-
文字列からダブルクオートの削除
-
VB.Net Object型 空かどうか
-
0除算の例外処理ができない!!...
-
VB.NETで16進数が正しいかどう...
-
数字か文字列かを判定する関数
-
例外ってIf文の中に入れますか...
-
C# マルチスレッドにおける例外...
-
スタックオーバーフローとは?
-
String型の日付(2005/11/25)の...
-
Timestamp型への変換について(J...
-
C# UriFormatExceptionの回避
-
ADOによるレコードの追加/更新
-
VBA Evaluate関数 型が一致しま...
-
WebClient()以外でネットにアク...
-
時間の取得
-
C#の捕捉されない例外処理の対...
-
javaプログラムで背景色を変更...
おすすめ情報