2017-11-21 7 views
0

이것은 내 개인적인 프로젝트로, 최종 학년을 계산하는 프로그램을 만들려고 노력하고 있으며 최선의 노력을 다했다고 생각합니다. 내 전체 프로그램이 작동 코드로 업데이트되었습니다 :자바 최종 학년 계산기

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

(50)는 그래서 당신은

Integer.parseInt("50 ")

를 호출 후 추가 공간이있다.

사용

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

예, 효과를 설명 할 수 있습니까? 왜 그것을 사용해야합니까? –

+0

trim()은 주어진 문자열에 대한 선행 및 후행 공백을 제거합니다. 파일의 마지막 줄이 "50"대신에 "50"이므로 trim()을 사용하거나 파일의 마지막 줄에서 후행 공백을 삭제해야합니다. – Ivan

+0

하지만 공간이 아니라 the Ive는 txt 파일의 각 줄을 확인하여 후행 공백이 있었는지 확인합니다. 나는 들어가서 txt 파일에'End'를 추가했는데 완벽하게 작동합니다. –