• ベストアンサー

画面出力の際の繰り返しと入力文字チェック

いつもお世話になっております。 System.out.println("数字を入力してください"); InputStreamReader reader = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(reader); String str = br.readLine(); int res = Integer.parseInt(str); と記述して画面に出力させた場合、数字以外を入力するとエラーになりますが、入力文字のチェックが可能な方法をご存知の方お願いします。 もうひとつ、作業が終わった後も"数字を入力してください"と繰り返すプログラムについてもご教授ください。 いつも簡単な質問で申し訳ありません・・。一応逆引き辞典で調べてはいるのですが。。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

>入力文字のチェック try { int res = Integer.parseInt(str); } catch(NumberFormatException e){ System.out.println("整数として解釈できない文字が入力されました"); } のような感じで例外処理します。 >繰り返すプログラム 全体を while(true){ } で囲むと繰り返すプログラムになります。 trueの部分を条件式にして条件でループを終了するようにしておくか if(条件) break; のようにループを条件で脱出できるようにしておきます。

norinorimi
質問者

お礼

BLUEPIXY様、ありがとうございます。今手元に開発環境が無いので自分で確かめられませんが参考にさせていただきます。while()ははじめて見ました。調べてみます。ありがとうございました。

その他の回答 (3)

  • covachan
  • ベストアンサー率38% (46/120)
回答No.4

判定に例外をトラップするというやり方はあまりお勧めできないですね。 try文自体あまり乱用するべきではないと思います。 まっとうに書けるのであれば書きましょう public static void main(String[] args)throws Exception { while(true){ System.out.println("数字を入力してください"); InputStreamReader reader = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(reader); String str = br.readLine(); if(!str.matches("[0-9]+")){ System.out.println("数字ではありません"); continue; } int res = Integer.parseInt(str); System.out.println("あなたが選択したのは ".concat(String.valueOf(res))); } }

norinorimi
質問者

お礼

covachanさま、遅れましたが、ご回答ありがとうございました。丁寧に解説していただいたのでそのまま練習に用いさせていただきました。 今後もよろしくお願いいたします。

  • tachiwa
  • ベストアンサー率34% (25/73)
回答No.3

String str = br.readLine();の処でIOExceptionが発生する可能性があるので、NumberFormatExceptionの後に補足する必要があるでしょう。 import java.io.*; public class InputNumber { public static void main(String[] args) { int res = 0; try{ System.out.println("数字を入力してください"); InputStreamReader reader = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(reader); String str = br.readLine(); res = Integer.parseInt(str); }catch(NumberFormatException e){ System.out.println("不正な入力です。" + e); }catch(IOException ex){ ex.printStackTrace(); } System.out.println("数字==" + res); } }

norinorimi
質問者

お礼

tachiwaさま、丁寧なプログラムありがとうございます。そのままテキストにできそうですね(失礼 お陰さまでよいべんきょうになりました。

回答No.2

好みの問題ですが、 例外を発生させるのが嫌なら for(int i = 0;i < str.length();i++){   if(!Character.isDigit(str.charAt(i)){     //数字以外が入力された   } } とするのも。

norinorimi
質問者

お礼

pcbeginner様いつもありがとうございます。 勉強になります。例外以外の方法があるんですね~

専門家に質問してみよう