Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java如何使用循环计算平均分数_Java_Loops_Average_Mean - Fatal编程技术网

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

Java如何使用循环计算平均分数,java,loops,average,mean,Java,Loops,Average,Mean,我需要用Java编写一个程序,计算4名学生的平均分数。学生输入4分,完成后输入-1计算平均值。完成后,程序需要转到学生2,依此类推。最后,它应该显示4个学生平均测试分数的最高平均值。以下是它运行时的外观: 学生1 输入你的分数:100 输入你的分数:90 输入你的分数:80 输入你的分数:70 输入你的分数:-1*学生输入-1后,应计算平均值 平均分=85分 学生2 输入你的分数:90 等 等 我的代码的问题是平均值只对第一个学生正确。当我输入-1以获得第二个学生的平均值时,计算结果不正确。我们

我需要用Java编写一个程序,计算4名学生的平均分数。学生输入4分,完成后输入-1计算平均值。完成后,程序需要转到学生2,依此类推。最后,它应该显示4个学生平均测试分数的最高平均值。以下是它运行时的外观:

学生1

输入你的分数:100

输入你的分数:90

输入你的分数:80

输入你的分数:70

输入你的分数:-1*学生输入-1后,应计算平均值

平均分=85分

学生2

输入你的分数:90

我的代码的问题是平均值只对第一个学生正确。当我输入-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;
          }   

      }  



}



}

你还没有明确提出问题,所以我将尝试遵守“让我走上正确的方向”部分

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

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);
双倍合计;

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


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

您可以尝试: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;
        }
    }
}

你需要有一个数组来存储每个分数,然后如果你得到-1,就迭代该数组,并根据数组中的元素数计算求和的平均值。那么,你的外循环在哪里?谢谢你的回答,但是我们不允许使用数组。我想WHILE循环就是外循环。谢谢你的帮助,它可以当然有帮助。但是我们也不允许使用中断语句。我将尝试解决这个问题。哦,在这种情况下,考虑将内部代码< >而<代码>循环为<代码> do……< /COD> >。请随便问(评论)。如果你需要更多的指针,再来一次!谢谢,我会尝试一下。是的,我想我需要使用for循环。谢谢你的帮助。