【问题标题】:How to calculate an average of a range?如何计算范围的平均值?
【发布时间】:2016-11-15 18:14:37
【问题描述】:

我需要一个家庭作业问题的帮助。问题如下:“使用 while 循环和 do while 循环计算一系列数字的总和和平均值。显示每个循环的结果。”我已经完成了大部分代码,我只是对它的平均部分有问题。这是我目前所拥有的。

import java.util.Scanner;

public class Homework {
    public static Scanner input = new Scanner(System.in);
    public static void main(String[] args) {
        //Get the minimum and maximum values for the range.
        System.out.print("Enter the minimum for the range: ");
        int number1 = input.nextInt();
        System.out.print("Enter the maximum for the range: ");
        int number2 = input.nextInt();
        int sum = 0;
        double average = 0;
        while (sum == 0){
            //Get the sum
            for (int i = number1; i <= number2; i++)
                sum = sum + i;
            for (int i = number1; i <= number2; i++)
                average = sum / i;
            System.out.println("(while loop)The sum is " + sum + " and the average is " + average + ".");
        }
        do {
            //reset the sum so it doesn't mess up.
            sum = 0;
            for (int i = number1; i <= number2; i++)
                sum = sum + i;
            for (int i = number1; i <= number2; i++)
                average = sum / i;
            System.out.println("(do-while loop)The sum is " + sum + " and the average is " + average + ".");
        } while (sum == 0);
    }
}

现在,我的主要问题是尝试获取最小值不是 1 的范围的平均值。只要该范围内的最小值为 1,它就可以正常工作。有什么办法可以得到它使用大于 1 的最小值。

【问题讨论】:

  • 从正确缩进代码开始。真的很难读。
  • 平均值只是总和/(高 - 低)
  • 我认为该任务意味着使用while 循环而不是 for 循环。您当前的whiledo-while 完全没有必要。
  • @ControlAltDel 所以本质上是 sum / numberOfElements
  • @litelite 绝对

标签: java range average


【解决方案1】:
int sum = 0;
int counter = number1;
while(counter <= number2){
   sum += counter;
   counter++;
}
System.out.println("Sum:\t" + sum);
System.out.println("Average:\t" + (sum / (number2 - number1 + 1));
//--------------------------------------------------
sum = 0;
counter = number1;
do{
   sum += counter;
   counter++;
}while(counter <= number2);
System.out.println("Sum:\t" + sum);
System.out.println("Average:\t" + (sum / (number2 - number1 + 1));

您的 while 循环 (sum == 0) 的 条件 没有意义。如果您想遍历一个范围,则该范围的结尾应该是您的条件。考虑 sumaverage 之间的关系可以清楚地表明,您只需要循环一次,然后将结果相除。如果您愿意,您可以重复循环(就像您尝试做的那样),但这会更慢且不必要。

干杯!

编辑:我只是想添加这个澄清,希望能进一步解释一下:你编写代码的方式,你的 while / do-while循环只会运行一次(就像您执行 for (int i = 0; i &lt; 1; i++) 一样)并且您实际上是在使用更熟悉的 for 循环inside while 循环。然而,正如另一位评论者指出的那样,这项作业的目的可能是让您了解如何使用 while 循环而不是使用更直观的 for 循环——而通过返回 for 循环,你证明了你的老师是对的 :)

【讨论】:

  • 啊,好的。谢谢,这真的很有帮助。
猜你喜欢
  • 1970-01-01
  • 2021-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-17
  • 2018-02-28
  • 2020-06-25
  • 1970-01-01
相关资源
最近更新 更多