Java如何使用循环计算平均分数

时间:2015-02-20 21:03:27

标签: java loops average mean

我需要用Java编写一个程序来计算4名学生的平均分数。学生将输入他们的4个分数,一旦完成,他们将输入-1来计算平均分。完成后,程序需要转移到学生2上,依此类推。最后,它应该显示4个学生平均考试成绩中的最高平均分。以下是运行时的样子:

学生1

输入您的分数:100

输入您的分数:90

输入你的分数:80

输入您的分数:70

输入你的分数:-1 *一旦学生输入-1,它应该计算平均值

平均分数= 85。

学生2

输入您的分数:90

ETC

ETC

我的代码存在的问题是平均值只适用于第一个学生。当我输入-1以获得第二个学生的平均值时,计算是不正确的。我们只允许使用循环。我给出的唯一提示是我们应该编写一个迭代4次的外循环,编写一个内循环,只要学生有分数进入就循环,在内循环内提示用户输入他们的最后分数或-1来计算平均值。我不希望你们为我做这个项目,只是让我朝着正确的方向前进。我觉得我没有使用正确的循环。

import java.util.Scanner;

public class TestScore

{

     public static void main(String[]args)
     {

       double score = 0;

       double totalScore = 0;

       double count = 0;

       double average = 0;

       Scanner input = new Scanner(System.in);


      System.out.println("Student 1");
      System.out.printf("Enter Your Score: ");
      score = input.nextDouble();



      while (score != -1){
          System.out.printf("Enter Your Score: ");
          totalScore = totalScore + score;
          score = input.nextDouble();
          count++;
          average = totalScore / count;

          if (score == -1){
              System.out.printf("Average Score = %.2f\n ",average);
              count = 0;
              score = 0;
              totalScore = 0;
              average = 0;
              System.out.println("Student 2");
              System.out.printf("Enter Your Score: ");
              score = input.nextDouble ();
              count++;
              average = totalScore / count;
          }   

      }  



}



}

3 个答案:

答案 0 :(得分:2)

您还没有明确地提出问题,所以我会尝试并遵守“让我朝着正确的方向前进的方式”#34;"一部分。

我建议将循环结构重新格式化为更清晰的结构,如下所示:

double total;
for(int student = 1; student <= 4; student++) {
    System.out.printf("Student %d\n", student);
    double sum = 0, count = 0;

    while(true) {
        System.out.printf("Enter your score: ");
        double input = scanner.nextDouble();
        if(input == -1) break;
        sum += input;
        count++;
    }
    total += sum;

    System.out.printf("Average: %.2f\n", sum / count);
}

System.out.printf("Total: %.2f\n", total);

希望能给你一些指示。

编辑:忘了照顾total

答案 1 :(得分:0)

所以,你希望迭代地完成所有输入并记住最大值。最大化一个整数变量,并在每个学生之后,如果需要,只需更改它。 (默认情况下为零) 至于每个学生的计算,你不应该在每次迭代中检查失败的“得分!= - 1”条件。相反,你应该在while循环后进行最后的计算。 (平均值,可能更新最大值,重置变量等) 您还需要外循环(在所述代码中,这些计算仅针对一个学生完成),您将以不同的方式控制。

此外,如果您只需要使用4个等级,则可能需要考虑使用for循环。

答案 2 :(得分:0)

你可以试试这个:D

public static void main (String[] args) throws java.lang.Exception
{
    double average = 0;
    double i = 0;
    int student = 0;
    boolean flag = true;
    Scanner input = new Scanner(System.in);
    while(flag)
    {
        System.out.printf("Student: ");
        System.out.println(student);
        System.out.print("Enter Your Score: ");

        double score = input.nextDouble();
        if(score!=-1){
            average=average+score;
            i=i+1;
        }

        if(score==-1){
            System.out.printf("Average: ");
            System.out.println(average/i);
            //reset values
             average = 0;
             i = 0;
            student=student+1;
        }
        if(score==-2){
            //you need break the while in some moment.
            flag = false;
        }
    }
}