2017-11-21 14 views
0

これは個人的なプロジェクトで、私の最終的な成績を計算するためのプログラムを作成しようとしています。私はすべてのことを正しいと思っていました。私の全プログラムは作業コードで更新されました。最終学年の電卓in java

FinalGradeCalculator:java.lang.NumberFormatException: For input string: "70 "

import java.io.*; 
import java.util.Scanner; 
public class FinalGradeCalculator { 
    public static final String readInFile = "MUSC110grades.txt"; 
    public static void main(String[] args) { 
     try 
     { 
      Scanner readFile = new Scanner(new File(readInFile)); 
      String longString = ""; 
      while(readFile.hasNextLine()) 
      { 
       longString = longString.concat(readFile.nextLine()+" "); 
      } 
      readFile.close(); 
      int indexQuiz = longString.indexOf("Quizzes"); 
      int indexConcertReports = longString.indexOf("Concert Reports"); 
      int indexMidterm = longString.indexOf("Midterm"); 
      int indexFinal = longString.indexOf("Final"); 
      int indexEnd = longString.indexOf("End"); 
      //Quiz 
      String quiz = longString.substring(indexQuiz+8, indexConcertReports); 
      String[] quizList = quiz.split(" "); 
      int quizScores = 0; 
      for(int i=0;i<quizList.length;i++) 
       quizScores += Integer.parseInt(quizList[i]); 
      //Concert Report 
      String cR = longString.substring(indexConcertReports+16, indexMidterm); 
      String[] cRList = cR.split(" "); 
      int cRScores = 0; 
      for(int i=0;i<cRList.length;i++) 
       cRScores += Integer.parseInt(cRList[i]); 
      //Midterm 
      String midterm = longString.substring(indexMidterm+8, indexFinal-1); 
      int midtermScores = Integer.parseInt(midterm); 
      //Final 
      String finals = longString.substring(indexFinal+6, indexEnd-1); 
      int finalsScores = Integer.parseInt(finals); 

      double quizAvg = Math.ceil(quizScores/quizList.length); 
      System.out.println("Your Quiz Average is " + quizAvg); 
      double cRAvg = Math.ceil(cRScores/cRList.length); 
      System.out.println("Your Concert Report Average is " + cRAvg); 
      double midtermGrade = Math.ceil(midtermScores); 
      System.out.println("Your Midterm Grade is " + midtermGrade); 
      double finalsGrade = Math.ceil(finalsScores); 
      System.out.println("Your Finals Grade is " + finalsGrade); 
      double totalGrade = Math.ceil(cRAvg*0.2 + quizAvg*0.35 + midtermGrade*0.2 + finalsGrade*0.25); 
      System.out.println("Your Total Grade is " + totalGrade); 

      if(totalGrade >= 90) 
       System.out.println("Your final grade is A"); 
      else if(totalGrade >= 85) 
       System.out.println("Your final grade is B+"); 
      else if(totalGrade >= 80) 
       System.out.println("Your final grade is B"); 
      else if(totalGrade >= 75) 
       System.out.println("Your final grade is C+"); 
      else if(totalGrade >= 70) 
       System.out.println("Your final grade is C"); 
      else if(totalGrade >= 65) 
       System.out.println("Your final grade is D+"); 
      else if(totalGrade >= 60) 
       System.out.println("Your final grade is D"); 
      else 
       System.out.println("your final grade is F"); 
     } 
     catch(Exception e) 
     { 
      System.out.println(e); 
     } 
    } 
} 

私はそれが私の番号形式の例外を与えるプログラムを実行します。ここではテキストファイルです:

MUSC110grades.txt:

Quizzes 
100 
100 
100 
100 
100 
100 
100 
100 
100 
100 
100 
0 
0 
100 
100 
100 
100 
100 
100 
100 
100 
100 
100 
100 
100 
100 
100 
100 
100 
100 
100 
100 
0 
0 
100 
100 
0 
0 
100 
100 
100 
100 
100 
100 
100 
100 
100 
100 
100 
100 
Concert Reports 
100 
100 
90 
90 
Midterm 
72 
Final 
70 
End 

今、私は数形式の例外が何であるかを調べましたが、数50が整数でない理由を私は理解していません。私はこの問題を解決する助けが必要です、それはインデックスの多分何かと関係しているかもしれません。よく分かりません。

答えて

0

これは、50の後に空白があることに由来していると思います。それを確認できますか?

+0

'50'の後にスペースがありませんが、私は、' int型finalsScores = Integer.parseInt(finals.trim())を使用してみました; '、それが働きました。 –

+0

これは、スペースがあったことを意味します。https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#trim() – Dummy101

0

あなたは

Integer.parseInt("50 ")を呼び出しているので、追加のスペースは50の後にあります。

使用は

int finalsScores = Integer.parseInt(finals.trim()); 
+0

を参照してください。うまくいきましたなぜ私はそれを使用しなければならなかったのですか? –

+0

trim()は、指定された文字列の先頭と末尾の空白を削除します。 ファイルの最後の行は "50"ではなく "50"なので、trim()を使うか、ファイルの最後の行からその末尾の空白を削除する必要があります。 – Ivan

+0

しかし、空白ではなく、Iveが通過し、txtファイルの各行をチェックしてスペースが残っていないかどうかを確認します。私は行ってtxtファイルに 'End'を追加しました。これは完全に動作します。 –