2016-05-05 4 views
2

教師の入力を受け入れるコードを作っていますので、クラスの平均成績を計算することができます。配列の平均を表示するにはどうすればよいですか?

残念ながら、私のコードは正しく動作していません。平均的な等級を表示しようとしていますが、エラーメッセージが生成され続けます。

最初にクラスサイズを取得するコードが必要です。次に、学生とその成績の名前を取ってください。

次に、クラスの平均成績を計算する必要があります。これは私がこれまで持っているものです。

package program; 

import java.util.Scanner; 
public class FinalGrades{ 
     public static void main(String[]args) { 
      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]; 
      for(int i = 0; i < totalStudents; i++){ 
       System.out.print("Name: "); 
       names[i] = input.next(); 
       System.out.print("Score: "); 
       scores[i] = input.nextDouble(); 
      } 
      double avg = 0; 
      double sum = 0; 
      for (int j = 0; j<= totalStudents; j++){ 
       sum += scores[j]; 
       avg = sum/totalStudents; 
       System.out.println("The average score was: " + avg);  
      } 

     } 

}  

私も学生と最高グレードを表示するためのコードのように横に名前を付けたいと思います:

94.5を、ヤコブ
(それではありません今必要です)。

答えて

3

あなたの最後のforが間違っている、あなたはそこにavgを計算しませんが、(あなたはすべてのスコアのsumを持っていた後)for後に終了します。次に、等級を取るとすぐにsumを計算します。最大級の学生を知るためには、入力が与えられると直ちに最大級を点検し、それが最大であるかどうかを覚えておいてください。同じ学年の生徒が複数いることがあるので、その位置を配列で保存してください。

ArrayList<Integer> bestStudentPosition = new ArrayList<Integer>(); 
ArrayList<Integer> worstStudentPosition = new ArrayList<Integer>(); 
double maxGrade = 0; 
double minGrade = 101; 
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]; 
     System.out.println("Running avg: " + (sum/(i + 1)); // for extra points 
     if (scores[i] > maxGrade) { 
      bestStudentPosition.clear(); // delete all previous students from list 
      maxGrade = scores[i]; 
      bestStudentPosition.add(new Integer(i)); 
     } 
     else if (scores[i] == maxGrade) { // if its same as some student(s) before, add this one to list too 
      bestStudentPosition.add(new Integer(i)); 
     } else if (scores[i] < minGrade) { 
      worstStudentPosition.clear(); 
      minGrade = scores[i]; 
      worstStudentPosition.add(new Integer(i)); 
     } else if (scores[i] == minGrade) { 
      minGrade= scores[i]; 
      worstStudentPosition.add(new Integer(i)); 
     } 

} 

avg = sum/totalStudents; // final avg 
System.out.println("The average score was: " + avg); 
System.out.println("Best student(s):"); 
for (Integer position : bestStudentPosition) { // print all best students 
     System.out.println(maxGrade + ", " + names[position]); 
} 
System.out.println("Worst student(s):"); 
for (Integer position : worstStudentPosition) { // print all worst students 
     System.out.println(minGrade + ", " + names[position]); 
} 
+0

どのようにあなたにも最低の学生を表示していましたか?いいね:最高スコア95.4最低スコア:58.4(しかしより良いフォーマット) –

+0

は私の答えで最悪の学生を見つけることを追加しました。今、あなたが何か他のものが必要な場合は、テキストを変更してください。書式設定については、あなたの国で通常どのようにスコアを提示していますか?私たちは通常、 "名前 - 88"のようにします... –

1

まず、平均的な概念を理解する必要があります。全体の合計です。

あなたがやっていることは、複数回にわたってダイビングすることです。

double avg = 0; 
double sum = 0; 
for (int j = 0; j < totalStudents; j++){ 
    sum += scores[j]; 
} 
avg = sum/totalStudents; 
System.out.println("The average score was: " + avg); 

あなたが移動平均を望むなら、あなたは何をする必要があります。

double avg = 0; 
double sum = 0; 
for (int j = 0; j < totalStudents; j++){ 
    sum += scores[j]; 
    avg += scores[j]/totalStudents; 
    System.out.println("The average score was: " + avg); 
} 
関連する問題