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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
- Java Javaの問題なのですが、「3文字以上の英数字文字列を入力し、文字列の中に文字(9)が出てくるまでの 1 2023/06/06 18:55
- Ruby vscode 文字化け 1 2022/05/21 19:17
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ループ処理の際、最後だけ","を...
-
Java、2の0乗~10乗の表示
-
総称型ArrayList<E>への参照...
-
java キーボード入力された値の...
-
コマンドライン引数の例外処理...
-
繰り返しによる星印の出力
-
キーボードから10人分の点数を...
-
javaプログラムについて
-
countに実行した回数をいれたい...
-
swing java
-
要素数が10の配列で、乱数0~9...
-
論理演算子”||”またはの入力方法
-
Java 入力した整数値の合計を、...
-
階乗の式
-
テキストボックスに入力された...
-
java 電卓のプログラム
-
Javaのはじめての質問です。 こ...
-
3つの値の中間値を求める
-
Javaでキーボードから入力され...
-
Javaのforとwhileの使い方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ループ処理の際、最後だけ","を...
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
Randomメソッドの確率設定
-
論理演算子”||”またはの入力方法
-
テキストボックスに入力された...
-
java キーボード入力された値の...
-
countに実行した回数をいれたい...
-
Java 配列<選挙>
-
総称型ArrayList<E>への参照...
-
Java、2の0乗~10乗の表示
-
2つのスクロールバーを連動させ...
-
数値⇒漢数字変換 java
-
Java 入力した整数値の合計を、...
-
配列を逆順させて表示させる方...
-
エラー(互換性の無い型)
-
javaで数独を解くプログラムに...
-
2次元配列の並び替え
-
javaのエラーが回収できない
-
7つ数字を表示したら改行すると...
-
java 電卓のプログラム
おすすめ情報