【问题标题】:Simple Java- The sentinal value keeps being calculated in my count and average?简单的Java-在我的计数和平均值中不断计算哨兵值?
【发布时间】:2020-05-09 20:20:46
【问题描述】:

对于家庭作业,我需要获得未指定数量的成绩(不超过 100),获得平均值,并显示高于和低于平均水平的分数。我正在尝试使用 Sentinal 值在输入成绩时退出循环。虽然它确实退出了循环,但它还将 Sentinal 值作为成绩输入并将其计算为平均值。例如,如果我输入分数“50 75 100”,然后以 -1 退出。结果将显示类似 74.66666666667 的内容。我可以通过查看我的 for 循环来了解它为什么会这样做,但我正在努力寻找解决它的方法。


public class AnalyzeScores {

 public static void main(String[] args) {
     double scores, average;
     int aboveAvg, belowAvg;
     double sum = 0;
     int count = 0;

     Scanner input = new Scanner(System.in);
     double[] scoresList = new double[100];


     for (int i = 0; i < 100; i++) {
         System.out.print("Enter Score " + (i + 1)  + "(negative score exits): ");
         scoresList[i] = input.nextDouble();
         sum = sum + scoresList[i];
         count++;

         if (scoresList[i] < 0) {
            average = (sum / i);
            System.out.println("average is " + average); 
            return;
         }
     }




 }

}

【问题讨论】:

  • 您正在退出该方法,但没有尝试找到高于或低于平均水平的分数。这就是为什么你只看到你的平均值。不在这里寻找答案,只需考虑如何遍历 scoreList 数组并在从方法返回之前将每个元素与平均值进行比较。
  • 是的,我还没有达到我搜索高于或低于平均水平的程度。在继续讨论之前,我想解决我所询问的另一个问题。原来我只需要移动一些语句

标签: java sum average


【解决方案1】:

你应该移动这段代码:

         sum = sum + scoresList[i];
         count++;

从 if 条件之前到 if 条件之后。

【讨论】:

    【解决方案2】:

    那是因为您在计算平均值时将 -1 放在了列表中。在将其添加到scoresList 之前,您需要检查输入值是否低于零。

    以下是修复此问题的代码(但仍需要一些改进):

    public class Main {
    
        public static void main(String[] args) {
            double scores, average;
            int aboveAvg, belowAvg;
            double sum = 0;
            int count = 0;
    
            Scanner input = new Scanner(System.in);
            double[] scoresList = new double[100];
    
    
            for (int i = 0; i < 100; i++) {
                System.out.print("Enter Score " + (i + 1)  + "(negative score exits): ");
                double score = input.nextDouble();
                if (score >= 0) {
                    scoresList[i] = score;
                    sum = sum + scoresList[i];
                    count++;
                }
                else break;
            }
            average = (sum / count);
            System.out.println("average is " + average);
        }
    }
    

    【讨论】:

    • 谢谢!在有人向我解释之后,它似乎总是那么简单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多