- ベストアンサー
do文とInputMismatchException処理
- JavaのScannerを使用して0~6の整数を入力する際に、InputMismatchExceptionが発生し、再度入力を求めずに無限ループになってしまう問題があります。
- この問題を解決するには、whileループの条件を変更して再入力を促す必要があります。
- 具体的には、whileループの条件をaが0以下または6以上の場合にtrueとして設定します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> e.printStackTrace(); > の後にa=sc.nextInt()を加えるのでしょうか? > これでは例外発生後に終了してしまいました. > a=next();ではint aに矛盾してしまいますし. InputMismatchExceptionのcatchブロックに、 sc.next(); を加えると良いと思います。 #e.printStackTrace(); #の前でも後でも構いません。 InputMismatchExceptionのcatchブロックが実行されるとき、 aに値は代入されず繰り返し条件は真となるので、 この場合、特にaに何か代入する必要はありません。
その他の回答 (1)
- isle
- ベストアンサー率51% (77/150)
'a'という入力が捨てられないので、ループして(Scannerの)nextIntメソッドで再び例外が発生することを繰り返します。 InputMismatchExceptionが発生したとき、(Scannerの)nextメソッドで入力を捨てるようにすると良いと思います。
補足
ご回答ありがとうございます. >'a'という入力が捨てられないので、ループして(Scannerの)nextIntメソッドで再び例外が発生することを繰り返します。 確かにそうですね.どうやってこの`a'を消そうかわかりませんでした. >InputMismatchExceptionが発生したとき、(Scannerの)nextメソッドで入力を捨てるようにすると良いと思います。 これはどういうことでしょうか. e.printStackTrace(); の後にa=sc.nextInt()を加えるのでしょうか? これでは例外発生後に終了してしまいました. a=next();ではint aに矛盾してしまいますし.
お礼
うまくいきました. 本当にありがとうございました.