2017-10-03 15 views
-1

こんにちは私はJavaの初心者です。数字を入力できるこのプログラムを作成しようとしていますが、 "done"と入力すると、 、numberInputsしかし、私はそれを実行し、私は入力 "完了"スレッド "メイン" java.lang.NumberFormatExceptionで例外を取得する:入力文字列の場合: "完了"。私はどうすればこの問題を解決できるか知っていますか?JavaでNumberFormatExceptionを修正するにはどうすればいいですか

at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 

at java.lang.Integer.parseInt(Integer.java:580) 
at java.lang.Integer.parseInt(Integer.java:615) 
at repeat.numberReader(repeat.java:15) 
at repeat.main(repeat.java:23) 

これは私のコードです:

import java.util.Scanner; 

public class repeat{ 
    public void numberReader(){ 
     Scanner myScanner = new Scanner(System.in); 
     int total = 1; 
     int numberInputs = 1; 
     String userInput; 

     do { 
      System.out.println("Enter a number: "); 
      userInput = myScanner.nextLine(); 
      total = total + Integer.parseInt(userInput); 
      numberInputs++; 
     } while (!"done".equals(userInput)); 
     System.out.println(total + "" + numberInputs + "" + (total/numberInputs)); 
    } 

    public static void main(String[] args){ 
     repeat instance = new repeat(); 
     instance.numberReader(); 
    } 
} 

あなたが値"done"ためuserInputをチェックしているが、あなたはInteger.parseInt()を呼び出した後にそれを行うあなたの助け

+0

になります。 「完了」は、整数に解析できない単語です。これはあなたにこのエラーを与えることになります。 nullpointerによって指摘された他の質問をチェックしてください。 – Yashovardhan

答えて

1

いただきありがとうございます。文字列"done"を整数として解析できないため、Integer.parseInt("done")を呼び出すとNumberFormatExceptionがスローされます。

do { 
    System.out.println("Enter a number: "); 
    userInput = myScanner.nextLine(); 
    ***ERROR HERE*** 
    total = total + Integer.parseInt(userInput); 
    numberInputs++; 
} while (!"done".equals(userInput)); 
    System.out.println(total + "" + numberInputs + "" + (total/numberInputs)); 
} 

これはいくつか解決できます。最も簡単なのは、コードを並べ替えることで、コードを受け取った直後に入力をチェックし、後で解析するだけです。これは、プロンプトが2回あることを必要とします(ループの前に一度、一番下に1回)。最初のエントリが"done"の場合はdo-whileのループが常に少なくとも1回実行されます。これを回避するwhileループ。また、これはあなたの期待"done"文字列以外の文字列を処理しません。

System.out.println("Enter a number: "); 
userInput = myScanner.nextLine(); 
do { 
    total = total + Integer.parseInt(userInput); 
    numberInputs++; 
    System.out.println("Enter a number: "); 
    userInput = myScanner.nextLine(); 
} while (!"done".equals(userInput)); 
    System.out.println(total + "" + numberInputs + "" + (total/numberInputs)); 
} 

また、あなたはまた、例外をキャッチして処理するためにエラー処理を実装することができますが、それはもう少し複雑である。この宿題のように聞こえるかもしれませんし、エラー処理はおそらくあなたの範囲を超えているので、私は最初の選択肢を考えています。

補足として、"done".equals(userInput)userInput.equals("done")に変更することを検討する必要があります。それらは機能的には同一ですが、第2のステートメントはあなたの意図がはるかにはっきりしています。これはuserInput"done"であるかどうかを確認することです。最初は自分や他の人が読んで理解することが難しいです。

0

あなたが入力がウェブサイトで示されているようInteger.parseInt(userInput)

 do { 
      System.out.println("Enter a number: "); 
      userInput = myScanner.nextLine(); 
      if(!"done".equals(userInput)){ 
      total = total + Integer.parseInt(userInput); 
      numberInputs++; 
      } 

     } while (!"done".equals(userInput)); 
      System.out.println(total + "" + numberInputs + "" + (total/numberInputs)); 
     } 
0

を使用する前に、「完了」であるかどうかを確認する必要がありますし、NumberFormatException、例外が数を表すものではありません、文字列を変換しようとによって引き起こされますこの場合、整数、:

例外はこのラインでトリガされ、「完了」:

total = total + Integer.parseInt(userInput); 

あなたが避けることができヘクタール次のように、この例外ndle:

public class repeat{ 
    public void numberReader(){ 
     Scanner myScanner = new Scanner(System.in); 
     int total = 1; 
     int numberInputs = 1; 
     String userInput; 

     boolean done = false; // Stop when true 

     do { 
      System.out.println("Enter a number: "); 
      userInput = myScanner.nextLine(); 
      try{  // Managing the exception 
       total = total + Integer.parseInt(userInput); 
      } catch(NumberFormatException e){ 
       if ("done".equals(userInput)){ // it's done!!!! 
        done = true; 
       } 
      } 
      numberInputs++; 
     } while (!done); 
      System.out.println(total + "" + numberInputs + "" + (total/numberInputs)); 
     } 

    public static void main(String[] args){ 
     repeat instance = new repeat(); 
     instance.numberReader(); 
    } 
} 

Read more about the try/catch

1

をあなたのコードに問題がこのラインである

total = total + Integer.parseInt(userInput); 

と仮定ユーザーが "完了" の文字列を入力します。

今、あなたのコードは、すなわち

total=total+Integer.parseInt("done"); 

したがって、NumberFormatExceptionが発生しますが、整数への文字列を解析しようとします。

正しいコードは、あなたが数字に単語を変換することはできません

import java.util.Scanner; 

public class repeat{ 
    public void numberReader(){ 
     Scanner myScanner = new Scanner(System.in); 
     int total = 1; 
     int numberInputs = 1; 
     String userInput; 



     while (true) 
     { 
      System.out.println("Enter a number: "); 
      userInput = myScanner.nextLine(); 
      if("done".equals(userInput)) 
      { 
       System.out.println(total + "" + numberInputs + "" + (total/numberInputs)); 
       break; 
      } 
      else 
      { 
       total = total + Integer.parseInt(userInput); 
       numberInputs++; 
      } 
     } 
    } 

    public static void main(String[] args){ 
     repeat instance = new repeat(); 
     instance.numberReader(); 
    } 
} 
+0

私はあなたのバージョンを試しましたが、私はまだ同じ間違い通知を受け取ります – hhppaarr

+0

この問題が発生している入力シーケンスを教えてください。 – Karan

関連する問題