アプリ版:「スタンプのみでお礼する」機能のリリースについて

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){}も追加してみましたが
ただエラーが表示されなくなるだけでした。
ちなみに変数はすべて宣言してあります。
解決方法ご存知の方いましたら教えてください。
よろしくお願いします。

A 回答 (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')
  {
   ;
  }
というコードを入れては如何でしょう。
    • good
    • 0
この回答へのお礼

ありがとうございます!無事解決しました。

ちなみにですが、
>なぜ、上がreadで、下がreadLineなのか・・・
上は1文字だけの入力なのでSystem.in.read()、
下は文字列の入力なので.readLine()を使いました。

System.in.read()は1文字入力された時点で
Enterを押す前に解決されてしまうということなんですね!

どっちも.readLine()に統一した方がいいのでしょうか?

お礼日時:2011/09/04 17:32

NumberFormatException で入力が空文字””ですと書いてありますね。



step=Integer.parseInt(str);//int型に変換

の部分の引数 str が ”” になっているためです。

Integer.parseInt は、数字として判定できる文字列を渡さなければいけません。

ちなみに Exception は例外であってエラーではないのでその辺も学習してくださいね。
    • good
    • 0
この回答へのお礼

ありがとうございます。

例外のFor input string: ""
で文字が入力されていないことはわかったのですが
どうして入力されないのかがどうしてもわからなかったので質問しました。
例外とエラーって違うんですね。
勉強しておきます。

お礼日時:2011/09/04 17:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!