
JAVA初心者です。下記のエラーを直したいんですがよくわかりません。
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at hangman.main(hangman.java:141)
ソースを載せたいのですが200行程度あって全部載せられないので
関連しそうなところだけ載せます。
~~~~~~~~~略~~~~~~~~~~~
try{
int input=System.in.read();
char str_moji1=(char)input;//ユーザの1文字入力
if(words[chosenWordRecord].indexOf(str_moji1) != -1){
System.out.println("debug:"+str_moji1+"の場所"+(words[chosenWordRecord].indexOf(str_moji1)+1));
}
else{
System.out.println(str_moji1+"は含まれてないよ!");
}
for(int arrayNum=0; arrayNum<wordArray.length; arrayNum++){
if(wordArray[arrayNum]==str_moji1){
System.out.print(" "+str_moji1);
}
else{
System.out.print(" _");
}
}
}catch(IOException e){
System.out.println(e);
}
try{
System.out.print("入力テスト:");
BufferedReader br1=new BufferedReader(new InputStreamReader(System.in));
String str=br1.readLine();
step=Integer.parseInt(str);//int型に変換
}catch(IOException e){
System.out.println(e); //141行目
}
~~~~~~~~~略~~~~~~~~~~~
状況としては、
ユーザの入力によって2つのテキストファイルを順にコマンドライン上に
表示しようとしているのですが1つ目のファイルから単語を呼んで処理を終えた後に、
2つ目のファイルを呼ぶための入力ができなくなっているようです。
かってに数字以外の文字が入力されてしまっているということでしょうか?
エラーで指定された場所にcatch(NumberFormatException e){}も追加してみましたが
ただエラーが表示されなくなるだけでした。
ちなみに変数はすべて宣言してあります。
解決方法ご存知の方いましたら教えてください。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
なぜ、上が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')
{
;
}
というコードを入れては如何でしょう。
ありがとうございます!無事解決しました。
ちなみにですが、
>なぜ、上がreadで、下がreadLineなのか・・・
上は1文字だけの入力なのでSystem.in.read()、
下は文字列の入力なので.readLine()を使いました。
System.in.read()は1文字入力された時点で
Enterを押す前に解決されてしまうということなんですね!
どっちも.readLine()に統一した方がいいのでしょうか?
No.2
- 回答日時:
NumberFormatException で入力が空文字””ですと書いてありますね。
step=Integer.parseInt(str);//int型に変換
の部分の引数 str が ”” になっているためです。
Integer.parseInt は、数字として判定できる文字列を渡さなければいけません。
ちなみに Exception は例外であってエラーではないのでその辺も学習してくださいね。
ありがとうございます。
例外のFor input string: ""
で文字が入力されていないことはわかったのですが
どうして入力されないのかがどうしてもわからなかったので質問しました。
例外とエラーって違うんですね。
勉強しておきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ループ処理の際、最後だけ","を...
-
テキストボックスに入力された...
-
繰り返しによる星印の出力
-
javaのプログラミングについて...
-
7つ数字を表示したら改行すると...
-
整数の和を求めるfor文
-
論理演算子”||”またはの入力方法
-
ヒストグラム
-
フィールド名やメソッド名に日...
-
javaプログラムについて
-
java キーボード入力された値の...
-
【JAVA <identifier>がありま...
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
C言語のポインターに関する警告
-
式の型は配列型で int に解決済...
-
IF関数でEmpty値を設定する方法。
-
メインが含まれていません
-
変数を動的に利用するには?
-
誰か~誰か~誰か~一生のお願...
-
プログラミングの問題です。大...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ループ処理の際、最後だけ","を...
-
java キーボード入力された値の...
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
数値⇒漢数字変換 java
-
テキストボックスに入力された...
-
論理演算子”||”またはの入力方法
-
Randomメソッドの確率設定
-
javaです。 途中まで出来ている...
-
繰り返しによる星印の出力
-
【JAVA <identifier>がありま...
-
Ctrl+Zが入力されると終了する...
-
7つ数字を表示したら改行すると...
-
Java 配列 勝敗、引き分け判定...
-
countに実行した回数をいれたい...
-
Java 配列<選挙>
-
要素数が10の配列で、乱数0~9...
-
(急いでいます)Javaで3回間違...
-
Java 入力した整数値の合計を、...
-
C#の質問
-
javaプログラムについて
おすすめ情報