Java-GPA-Logikfehler

  • Ich versuche, ein einfaches GPA-Berechnungsprogramm in Java zu erstellen, aber ich habe irgendwo einen Logikfehler, der dazu führt, dass die Antworten falsch sind.

    Meine ersten Testwerte sind eine Note von 87,3% und einen Kreditwert von 3 sowie eine Note von 74,2% und eine Kreditwürdigkeit von 3,0. Ich bekomme eine Antwort von 4.0, wenn ich den gradePointTotal drucke oder einen gewichteten Kreditwert nennen sollte, bekomme ich 24.0 anstelle von 21.0.

     public class lab5{
    
         public static void main(String[] args){
                 double gradeTotal = 0;
                 double gradeAverage = 0;
                 double creditValueTotal = 0;
                 double gradePoint = 0;
                 double gradePointTotal = 0;
                 int counter = 1;
    
                 Scanner input = new Scanner(System.in);
                 Scanner input2 = new Scanner(System.in);
                 String repeat;
                 do {
                 System.out.print("Enter a grade: ");
                 double grade = input.nextDouble();
                 System.out.print("Enter credit value: ");
                 double creditValue = input.nextDouble();
                 System.out.print("Enter Another course ? (YES/NO) ");
                 repeat = input2.next();
                 gradeTotal += grade;
                 gradeAverage = gradeTotal / counter;
                 creditValueTotal += creditValue;
    
                 if (gradeAverage >= 80)
                gradePoint = 4.0;
         else if (gradeAverage >= 75)
                gradePoint = 3.5;
         else if (gradeAverage >= 70)
                gradePoint = 3.0;
         else if (gradeAverage >= 65)
                gradePoint = 2.5;
         else if (gradeAverage >= 60)
                gradePoint = 2.0;
         else if (gradeAverage >= 50)
                gradePoint = 1.0;
         else if (gradeAverage < 50)
                gradePoint = 0.0;
    
         gradePointTotal += gradePoint * creditValue;
    
         counter++;
                 }
                 while("YES".equalsIgnoreCase(repeat) || "y".equalsIgnoreCase(repeat));
    
                 double gradePointAverage = gradePointTotal / creditValueTotal;
    
         System.out.println(gradePointAverage);
    
    
    
         }
    
    }
     
    09 December 2011
    Joel Coehoorn
3 answers
  • Zum Start gibt es hier vieles falsch. Du lernst, also ist das gut. Beim Programmieren sollten Sie sich jedoch daran erinnern, dass Sie aus einem bestimmten Grund Codezeilen schreiben. Jede Codezeile hat einen bestimmten Grund. Wenn Sie Ihren Code betrachten, sehe ich einige Verwirrung. Sie verstehen nicht, was jede Codezeile tut. Beispielsweise haben Sie Eingaben und Eingaben 2. Warum? (Hinweis, Sie sind wahrscheinlich verwirrt, was System.in tut).

    Was Sie tun müssen, bevor Sie Code schreiben, ist eine englische Beschreibung dessen, was Sie tun möchten. Es sollte folgendermaßen aussehen:

    // Schritt 1: Fragen Sie wiederholt nach Kursergebnis und GPA, bis der Benutzer die Eingabe abgeschlossen hat.

    // Schritt 2: Addiere alle Punkte, die der Benutzer zusammen eingegeben hat. Teilen Sie die Anzahl der Einträge.

    // Schritt 3: Drucken Sie die Ausgabe aus.

    Dann können Sie die Ausgabe löschen Details zu jedem Stamm

    // Schritt 1a) Holen Sie ein Handle an die Befehlszeilen-Benutzeroberfläche, um Daten zu erhalten (System.in) .. etc

    Grundsätzlich beginnen Sie mit einer übergeordneten Gliederung und leeren dann die Details. Die letzten Details sind Ihre Codezeilen. Dies hat den Vorteil, dass Sie selbstkommentierenden Code erstellen, sodass Ihre Instruktoren und andere Personen nicht nur lesen können, was Sie gerade tun, sondern warum Sie dies tun. Sie können auch den richtigen Funktionsaufruf oder die richtige Systemressource finden, um das zu tun, was Sie wollen, anstatt über eine Ressource zu verfügen, von der Sie nicht wissen, was sie tut, und zu versuchen, das zu tun, was Sie wollen.

    22 November 2011
    Zak
  • Versuchen Sie, die Zeile zu entfernen, in der Sie gradeAverage berechnen. Das Unterteilen der angegebenen Note durch Ihre counter oder sogar einen Zähler an erster Stelle macht für mich keinen Sinn. Verwenden Sie auch grade im Zustand jedes Ihrer if-else-ifs.

    22 November 2011
    Tyler
  • Es ist besser, den Durchschnitt von gradePointAverage zu ermitteln.

     CreditValue Total = CreditValue;
    GradePointTotal = GradePoint*CreditValue;
    double gradePointAverage += gradePointAverage + (GradePointTotal/CreditValueTotal);
    double GPA = gradePointAverage / count;
     

    Durch Nicht-Zuwachs Die Kreditsumme und die Gesamtpunktsumme werden bei jeder erneuten Eingabe der Schleife neu zugewiesen. Durch das Inkrementieren von gradePointAverage können Sie jedoch weitere hinzufügen. Dann nehmen Sie den Durchschnitt, um die durchschnittliche GPa zu erhalten.

    22 November 2011
    ironcyclone