2017-11-21 4 views
0

Dies ist ein persönliches Projekt, nur versucht, ein Programm zu erstellen, um meine Abschlussnote zu berechnen und nach meinem besten Wissen dachte ich, ich habe alles richtig gemacht, hier ist mein gesamtes Programm mit Arbeitscode aktualisiert:Final Grade Rechner in Java

FinalGradeCalculator:

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); 
     } 
    } 
} 

Wenn ich das Programm führen sie es mir ein Zahlenformat Ausnahme gibt: java.lang.NumberFormatException: For input string: "70 ". hier ist die Textdatei:

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 

Jetzt habe ich nachgeschlagen, was ein Zahlenformat Ausnahme ist, aber ich verstehe nicht, warum die Zahl 50 nicht eine ganze Zahl ist. Ich brauche Hilfe bei der Lösung dieses Problems, vielleicht hat es etwas mit dem Index zu tun. Ich bin mir nicht sicher.

Antwort

0

Ich denke, das kommt von der Tatsache, dass es einen Raum nach 50 gibt. Kannst du das überprüfen?

+0

Es ist kein Raum nach '50' aber ich versuchte, mit' int finalsScores = Integer.parseInt (finals.trim()); 'und das funktionierte. –

+0

Was bedeutet, es gab ein Leerzeichen :) Siehe https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#trim() – Dummy101

0

Es gibt einen zusätzlichen Raum nach 50, so sind Sie

Integer.parseInt("50 ") aufrufen.

Verwenden

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

Ja, das hat funktioniert, können Sie bitte erklären, was trimmen und warum musste ich es benutzen? –

+0

trim() entfernt führende und nachfolgende Leerzeichen für eine gegebene Zeichenfolge. Die letzte Zeile in Ihrer Datei ist "50" anstelle von "50". Sie müssen also entweder trim() verwenden oder das nachstehende Leerzeichen aus der letzten Zeile der Datei löschen. – Ivan

+0

aber es gibt kein Leerzeichen, ich habe durchgegangen und überprüft jede Zeile in der TXT-Datei, um zu sehen, ob es ein nachstehendes Leerzeichen gab und es gibt keins. Ich ging hinein und fügte der txt-Datei ein 'End' hinzu und es funktioniert perfekt. –