2016-05-05 8 views
0

Ich versuche, meinen Code die höchste Punktzahl, die niedrigste Punktzahl und die durchschnittliche Punktzahl einer Lehrerklasse anzeigen zu lassen.Formatierung meiner Ausgabe richtig

Ich möchte es so angezeigt werden:

Höchste Punktzahl: 94,7, Jake

niedrigste Score: 80,2, Emily

Durchschnittliche Bewertung: 85,6

Der höchste Grad und die durchschnittliche Klasse funktioniert, aber die niedrigste Note nicht. Das ist, was ich bisher habe:

import java.util.*; 

public class Grades { 
    public static void main(String[] args) { 
     ArrayList<Integer> bestStudentPosition = new ArrayList<Integer>(); 
     ArrayList<Integer> worstStudentPosition = new ArrayList<Integer>(); 
     Scanner input = new Scanner(System.in); 
     System.out.print("How many students are in your class? "); 
     int totalStudents = Integer.parseInt(input.nextLine());  
     String[] names = new String[totalStudents]; 
     double[] scores = new double[totalStudents]; 
     double maxGrade = 0; 
     double minGrade = scores[0]; 
     double avg = 0; 
     double sum = 0; 
     for(int i = 0; i < totalStudents; i++){ 
       System.out.print("Name: "); 
       names[i] = input.next(); 
       System.out.print("Score: "); 
       scores[i] = input.nextDouble(); 
       sum += scores[i]; 

       if (scores[i] > maxGrade) { 
        bestStudentPosition.clear(); 
        maxGrade = scores[i]; 
        bestStudentPosition.add(new Integer(i)); 
       } 
       else if (scores[i] == maxGrade) { 
        bestStudentPosition.add(new Integer(i)); 
       } 
       if (scores[i] < minGrade) { 
        worstStudentPosition.clear(); 
        minGrade = scores[i]; 
        worstStudentPosition.add(new Integer(i)); 
       } 
       else if (scores[i] == minGrade) { 
        worstStudentPosition.add(new Integer(i)); 
       } 

     } 

     avg = sum/totalStudents; 
     System.out.print("Highest score: "); 
     for (Integer position : bestStudentPosition) { 
      System.out.println(maxGrade + ", " + names[position]); 
     } 
     System.out.print("Lowest score: "); 
     for (Integer position : worstStudentPosition) { 
       System.out.println(minGrade + ", " + names[position]); 
     } 

     System.out.printf("Average: %3.2f", avg); 

    } 
} 

Jede Hilfe wäre willkommen.

+0

In if (Noten [i])

+0

'Partituren [0]' hat nichts dort eingestellt . Überprüfen Sie die Antwort. –

Antwort

2
scores[i] < minGrade 

wo minGrade zunächst 0 ist und Sie es nie einen anderen Wert als 0. Auch die Zuordnung, wird dies nur funktionieren, wenn Grad weniger als 0

So wird, wahrscheinlich das, was Sie tun müssen, ist,

import java.util.ArrayList; 
import java.util.Scanner; 

public class Grades { 
    public static void main (String[] args) { 
     ArrayList<Integer> bestStudentPosition = new ArrayList<Integer>(); 
     ArrayList<Integer> worstStudentPosition = new ArrayList<Integer>(); 
     Scanner   input    = new Scanner(System.in); 
     System.out.print("How many students are in your class? "); 
     int  totalStudents = Integer.parseInt(input.nextLine()); 
     String[] names   = new String[totalStudents]; 
     double[] scores  = new double[totalStudents]; 
     double maxGrade  = 0; 
     double minGrade  = 0; 
     double avg   = 0; 
     double sum   = 0; 
     for (int i = 0; i < totalStudents; i++) { 
      System.out.print("Name: "); 
      names[i] = input.next(); 
      System.out.print("Score: "); 
      scores[i] = input.nextDouble(); 
      sum += scores[i]; 
      if (i == 0) { 
       minGrade = scores[0]; 
      } 
      if (scores[i] > maxGrade) { 
       bestStudentPosition.clear(); 
       maxGrade = scores[i]; 
       bestStudentPosition.add(new Integer(i)); 
      } else if (scores[i] == maxGrade) { 
       bestStudentPosition.add(new Integer(i)); 
      } 
      if (i > 0 && scores[i] < minGrade) { 
       worstStudentPosition.clear(); 
       minGrade = scores[i]; 
       worstStudentPosition.add(new Integer(i)); 
      } else if (scores[i] == minGrade) { 
       worstStudentPosition.add(new Integer(i)); 
      } 

     } 

     avg = sum/totalStudents; 
     System.out.print("Highest score: "); 
     for (Integer position : bestStudentPosition) { 
      System.out.println(maxGrade + ", " + names[position]); 
     } 
     System.out.print("Lowest score: "); 
     for (Integer position : worstStudentPosition) { 
      System.out.println(minGrade + ", " + names[position]); 
     } 

     System.out.printf("Average: %3.2f", avg); 

    } 
} 

assign minGrade mit Anfangswert von scores[0] vor diesen Bedingungen. z.B.

minGrade = scores[0];

Dies ist die Ausgabe:

Wie viele Schüler in der Klasse sind? 3

Name: Harry

Score: 90,2

Name: Laurent

Score: 99,99

Name: Darren

Score: 98,9

Höchste Punktzahl: 99,99, Laurent

niedrigste Punktzahl: 90,2, Harry

Durchschnitt: 96,36

+0

Haben Sie das gemeint? (Ich habe den Code bearbeitet) –

+0

Die Antwort @JamesV wurde aktualisiert. –

+0

Wenn ich dies führe, schreibt es die höchste Note und Durchschnittsnote (die auch falsch ist) vorzeitig. Ich bin mir also nicht sicher, was damit nicht stimmt. –