【问题标题】:Java program calculates averages. How do I display highest average?Java 程序计算平均值。如何显示最高平均值?
【发布时间】:2015-04-23 10:44:40
【问题描述】:

我有一个 java 程序,它获取 4 个玩家的分数,并在输入 -1 时计算每个玩家的平均分数。在程序结束时,我需要显示 4 个平均分中的最高平均分,但是我不知道如何做到这一点,你们能给我指明正确的方向吗?程序运行时如下所示:(我还附上了我的代码)除了循环我不能使用任何东西。

玩家 1

输入你的分数:100

输入你的分数:90

输入你的分数:80

输入你的分数:70

输入你的分数:-1(输入-1时,计算平均分)

平均分 = 85.00

玩家 2

输入你的分数:90

输入你的分数:90

等等

等等

import java.util.Scanner;

public class BowlingScores
{
    public static void main(String[]args)
    {
      double score = 0;
      double totalScore = 0;
      double count = 0;

      Scanner input = new Scanner(System.in);

      for (int player = 1; player <= 4; player++){
         System.out.printf("\nPlayer %d\n", player);

        do{
           System.out.println("Enter Your Score: ");
           totalScore = totalScore + score;
           score = input.nextDouble(); 
           count++;
         } while (score != -1);

         if (score == -1){
          count--;
          System.out.printf("Average Score = %.2f\n",totalScore/count);
          count = 0;
          score = 0;
          totalScore = 0;
         }    
      }    
   }
}

【问题讨论】:

  • 您将 -1 添加到分数。我会在“totalScore+=score; count++”之前做“if score == -1 break
  • 对不起,我还应该提到我们不允许使用休息时间。
  • 那么需要在while条件下使用。 (更新了我的答案)。

标签: java loops average mean


【解决方案1】:

只需跟踪另一个变量中的最高平均值。然后在您的score == -1 条件中检查当前平均值是否高于最高平均值,如果是,则将当前平均值设为新的最高值。然后在你的 for 循环之后,你可以打印出最高的平均值。

【讨论】:

  • 感谢您的帮助。解决了我的问题。
【解决方案2】:

您可以像 double highest = 0 这样在代码顶部添加最高值的副本,然后在您的 for 循环中,如果当前平均值较高,则可以替换它。

if(score > highest){
      highest=score;
}

然后在 -1 处,您可以将其重置为 0 或保持运行。

【讨论】:

    【解决方案3】:
    public static void main(String[] args) {
        final List<Double> allAverages = new ArrayList<>();
        double score = 0;
        double totalScore = 0;
        double avg = 0;
        int count = -1;
    
        Scanner input = new Scanner(System.in);
    
        for (int player = 1; player <= 4; player++) {
            System.out.printf("\nPlayer %d\n", player);
    
            do {
                System.out.println("Enter Your Score: ");
                totalScore = totalScore + score;
                score = input.nextDouble();
                count++;
            } while (score != -1);
    
            avg = totalScore / count;
            System.out.printf("Average Score = %.2f\n", avg);
            allAverages.add(totalScore / count);
            score = 0;
            totalScore = 0;
            count = -1;
        }
    
        System.out.println("The highest is : " + Collections.max(allAverages));
    
    }
    

    这里列出了我对您的代码所做的修改以使其正常工作:

    • 变量 count 现在从 -1 开始,所以当我们退出循环时不需要进行计数。
    • 我添加了一个跟踪所有平均值的列表。
    • 我在循环之后删除了验证 if(count == -1),因为退出循环的唯一方法是让 count == -1,所以我们已经知道它是实际值。
    • 要检索所有平均值的最大值,我使用Collections.max(allAverages)

    【讨论】:

    • 非常感谢。现在这很有意义。
    【解决方案4】:

    取所有 4 个玩家的平均值并存储到一个数组中。然后检查数组中的最大数。

    double[] highest = new double[4];
    for(int i=0; i<4; i++){
        highest[i] = totalScore/count;
    }
    
    if(highest[0]>highest[1] && highest[0]>highest[2] && highest[0]>highest[3])
        System.out.println("highest" + highest[0]);
    
    else if(highest[1]>highest[0] && highest[1]>highest[2] && highest[0]>highest[3])
        System.out.println("highest" + highest[1]);
    
    else if(highest[2]>highest[0] && highest[2]>highest[1] && highest[0]>highest[3])
        System.out.println("highest" + highest[2]);
    
    else System.out.println("highest" + highest[3]);
    

    【讨论】:

      【解决方案5】:
      public static void main(String[]args) {
          double bestScore = 0;
          int bestPlayer = 1;
      
          Scanner input = new Scanner(System.in);
      
          for (int player = 1; player <= 4; player++){
              System.out.printf("\nPlayer %d\n", player);
              int count = 0; // does not need to be double
              double totalScore = 0;
              do {
                  System.out.println("Enter Your Score: ");
                  double score = input.nextDouble();
                  if (score != -1) { 
                      totalScore += score;
                      count++;
                  }
              } while (score != -1);
      
              double averageScore = totalScore / count;
      
              if (averageScore > bestScore) {
                  bestScore = averageScore;
                  bestPlayer = player;
              }
      
              System.out.printf("Average Score = %.2f\n", averageScore);
          }
      
          System.out.printf("Best Average Score = %.2f, best player = %d\n", bestScore, bestPlayer);
      }
      

      【讨论】:

      • 太棒了,非常感谢。这个效果最好,因为它不使用我们不允许使用的任何东西,例如数组等。
      【解决方案6】:

      只需保留一个变量来记录每次的最高平均得分,如下面的示例中的topAverage。该代码与您的代码相同,只是为了便于阅读,我更改了变量名称。

      public static void main(String[] args) throws NumberFormatException,
                  IOException {
              double currentScore = 0;
              double totalScore = 0;
              int numScores = 0;
              double averageScore = 0;
              double topAverage = 0;
              BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
              for (int i = 0; i < 4; i++) {
      
                  do {
                      System.out.println("Enter Score");
                      currentScore = Double.parseDouble(br.readLine());
                      totalScore = totalScore + currentScore;
                      numScores += 1;
                  } while (currentScore != -1);
                  numScores-=1;
                  totalScore+=1;
                  averageScore = totalScore / numScores;
                  System.out.println("Average Score is " + averageScore);
                  if (topAverage < averageScore) {
                      topAverage = averageScore;
                  }
                  currentScore = 0;
                  totalScore = 0;
                  numScores = 0;
              }
              System.out.println("Top Average is " + topAverage);
          }
      

      编辑

      @Andrei Nikolaenko 在我之前发布了相同的答案,所以考虑一下这个答案,我添加这个编辑是因为我想提一下我的浏览器没有按时刷新来告诉我答案有已经发布了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-14
        • 2012-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-06
        相关资源
        最近更新 更多