- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:javaのエラーが回収できない)
javaのエラーが回収できない
このQ&Aのポイント
- java.lang.NumberFormatExceptionエラーが発生し、入力文字列が空であるために整数への変換ができない。
- ユーザが入力した文字が配列に含まれているかどうかを判断し、結果を表示するプログラムの一部のコード。
- ユーザが入力した文字をテストし、整数に変換しようとするコード。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
なぜ、上がreadで、下がreadLineなのか・・・ 上の方の int input=System.in.read(); をやると、Enterキーが押されるまで処理がストップします。 また、一文字しか読み込みません。 たとえば、「1」と入力して「Enter」を入力した場合、 (1)int input=System.in.read();にて「1」を読み込む (2)String str=br1.readLine();にて「Enter」を読み込む(結果「str」には空文字が入る) となります。 ユーザーに何を入力させたいのかによりますが、 一番、単純な解決方法としては、 int input=System.in.read(); の下あたりに int tmp; while((tmp = System.in.read()) != '\n') { ; } というコードを入れては如何でしょう。
その他の回答 (1)
- paul_robot
- ベストアンサー率50% (1/2)
回答No.2
NumberFormatException で入力が空文字””ですと書いてありますね。 step=Integer.parseInt(str);//int型に変換 の部分の引数 str が ”” になっているためです。 Integer.parseInt は、数字として判定できる文字列を渡さなければいけません。 ちなみに Exception は例外であってエラーではないのでその辺も学習してくださいね。
質問者
お礼
ありがとうございます。 例外のFor input string: "" で文字が入力されていないことはわかったのですが どうして入力されないのかがどうしてもわからなかったので質問しました。 例外とエラーって違うんですね。 勉強しておきます。
お礼
ありがとうございます!無事解決しました。 ちなみにですが、 >なぜ、上がreadで、下がreadLineなのか・・・ 上は1文字だけの入力なのでSystem.in.read()、 下は文字列の入力なので.readLine()を使いました。 System.in.read()は1文字入力された時点で Enterを押す前に解決されてしまうということなんですね! どっちも.readLine()に統一した方がいいのでしょうか?