2016-05-05 3 views
0

Я пытаюсь, чтобы мой код отображал наивысший балл, наименьший балл и средний балл класса преподавателя.Правильно форматирование моего вывода

Я хочу, чтобы показать, как это:

Самый высокий показатель: 94,7, Джейк

Самая низкая оценка: 80,2, Эмили

Средняя оценка: 85,6

Самый высокий класс и средний но самый низкий класс - нет. Это то, что у меня есть до сих пор:

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

    } 
} 

Любая помощь будет оценена по достоинству.

+0

В случае (оценки [я])

+0

'оценки [0]' не имеет ничего там , Проверьте ответ. –

ответ

2
scores[i] < minGrade 

где minGrade 0 изначально, и вы никогда не присваивая ему значение, отличное от 0. Кроме того, это будет работать, только если оценка будет меньше 0.

Таким образом, вероятно, что вам нужно сделать есть,

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

    } 
} 

правопреемником minGrade с начальным значением scores[0] до этих условий. например

minGrade = scores[0];

Это выход:

Сколько студентов в классе? 3

Имя: Harry

Score: 90,2

Имя: Laurent

Score: 99,99

Имя: Даррен

Score: 98,9

Самая высокая оценка: 99.99, Laurent

Самая низкая оценка: 90,2, Гарри

Средний балл: 96,36

+0

Это то, о чем вы говорили? (Я отредактировал код) –

+0

Обновлен ответ @JamesV. –

+0

Когда я запускаю это, он преждевременно ставит высший класс и средний класс (который также является неправильным). Поэтому я не уверен, что с этим не получается. –