【问题标题】:Find mean and standard deviation using loops使用循环查找均值和标准差
【发布时间】:2016-03-08 12:57:23
【问题描述】:

我的目标是计算从用户输入中获得的 10 个数字的均值标准差

我在课堂上只学习了 while 循环

问题: 如何将每个用户输入(在循环内)分配给一个单独的变量,以便稍后与平均值进行比较,以找到标准偏差?

(我在课堂上没有教过数组。所以,我必须在不使用数组的情况下解决这个问题)

我做了很长很乏味的程序,但如果需要,我可以提供更多代码来证明我可以做 while 循环来找到平均值。

import java.util.Scanner;

public class StandardDev
{
   public static void main (String[] args)
   {
   Scanner input = new Scanner (System.in);

   double num1 = 0, num2 = 0, num3 = 0, num4 = 0, num5 = 0, num6 = 0, num7 = 0, num8 = 0, num9 = 0, num10 = 0, total = 0, mean = 0, stDev1 = 0, stDev2 = 0, sum = 0;

   System.out.println("Enter 10 numbers: ");
   num1 = input.nextDouble();
   num2 = input.nextDouble();
   num3 = input.nextDouble();
   num4 = input.nextDouble();
   num5 = input.nextDouble();
   num6 = input.nextDouble();
   num7 = input.nextDouble();
   num8 = input.nextDouble();
   num9 = input.nextDouble();
   num10 = input.nextDouble();

   sum = num1+num2+num3+num4+num5+num6+num7+num8+num9+num10;

   mean = sum / (double) 10;

   stDev1 = Math.pow(num1 - mean, 2) + Math.pow(num2 - mean, 2) + Math.pow(num3 - mean, 2) + Math.pow(num4 - mean, 2) + Math.pow(num5 - mean, 2) + 
   Math.pow(num6 - mean, 2) + Math.pow(num7 - mean, 2) + Math.pow(num8 - mean, 2) + Math.pow(num9 - mean, 2) + Math.pow(num10 - mean, 2);

   stDev2 = Math.sqrt(stDev1 / 10);

   System.out.println ("The mean is " + mean + ".");
   System.out.println ("The standard deviation is " + stDev2 + ".");
   }
}

这就是我找到平均数的方法。我的逻辑告诉我,如果我可以单独访问这些输入以从均方和平方中减去,我只能找到标准偏差。不知道如何..

import java.util.Scanner;

public class JTillman03_45
{
   public static void main (String[] args)
   {
   Scanner input = new Scanner (System.in);

   int count = 0, total = 0;

   double mean, stDev = 0;

   System.out.println("Enter a digit: ");
   int number = input.nextInt();

   while (count < 9){
      total += number;
      count++;


   System.out.println("Enter a digit: ");
   number = input.nextInt();
   }

   mean = total / (double) count;

   System.out.println("The mean of those numbers is: " + mean); 
   System.out.println("The standard deviation of those numbers is: " + stDev); 
  }
}

【问题讨论】:

  • 数组在这里可以很好地工作。你知道使用一个是否可以接受吗?
  • 它只是使用循环。我已经修改了这个程序并在下面更新了
  • @MatthewCliatt 我们不能使用数组,因为 1)我们没有在课堂上讨论过它们 2)我不知道如何使用数组大声笑

标签: java loops standard-deviation


【解决方案1】:

您真的需要存储所有整数吗?如果不是,您可以使用以下三个值计算平均值和标准差:

  1. 输入了多少个数字(在您的问题中,它是一个固定值 10)。
  2. 所有数字的总和。
  3. 数字的平方和。

这给了

double count = 10.0;   // is 10.0 for your problem
double sum1 = 0.0;    // sum of the numbers
double sum2 = 0.0;    // sum of the squares
int i;
for (i=0; i < 10; i++) {
  System.out.println("Enter 10 numbers: ");
  double n = input.nextDouble();
  sum1 += n;
  sum2 += n * n;
}
double average = sum1 / count;
double variance = (count * sum2 - sum1 * sum1) / (count * count);
double stdev = Math.sqrt(variance); 

【讨论】:

  • 啊。太棒了。除了存储所有 10 个整数之外,我想不出任何其他方法来计算它。直观地看到这有助于我更彻底地理解计算。因此,您可以在最后使用不同的总和进行计算,而不是执行每个整数的计算。
【解决方案2】:

要对 10 个用户输入的数字求和,您可以只使用一个变量和 += 运算符来跟踪总和。不需要有这么多变量,这就是循环的用途!例如,

double sum = 0;
Scanner input = new Scanner (System.in);
int counter = 1;
System.out.println("Enter 10 numbers: ");
//adds up 10 user-inputted numbers
while(counter <= 10){
     sum += input.nextDouble();
     //how the loop will end after 10th iteration
     counter++;
}
double mean = sum/10; //no need for double cast here since sum is a double

没有数组,很难使用循环计算标准偏差,因为我们需要访问各个数字来找到标准偏差。因此,您的解决方案实际上是唯一的方法,除非我们让用户使用类似于上面的 while 循环再次输入相同的 10 个数字来查找方差。例如,

//reset counter
counter = 1;
double variance = 0;
System.out.println("Enter 10 numbers: ");

while(counter <= 10){
     variance += Math.pow(input.nextDouble()-mean,2);
     counter++;
}
double stdDev = Math.sqrt(variance/10);
System.out.println ("The mean is " + mean + ".");
System.out.println ("The standard deviation is " + stdDev + ".");

【讨论】:

  • 什么意思?我只是提供一个使用用户要求的循环的示例?由于用户不能使用数组,这只是他的问题的一个可能的解决方案。
【解决方案3】:

使用while 循环,迭代input.nextDouble() 的值作为循环的条件。只要有输入,循环就会继续进行。同时,对输入的数量和数字的总和进行计数。只需使用这两个数字,您就可以计算平均值和标准差。如果您查看stDev1,您会发现它只是数字的总和减去平均乘以 10(或输入数)。平均值只是总和除以输入数。如果您需要更多解释,请告诉我。我将很快添加一些示例代码。

public class StandardDev {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        while (input.hasNext()) {
            sum += input.nextDouble();
            count++;
        }
        mean = sum / count;
        stdDev = sum - (count * mean);

        System.out.println("The mean is " + mean + ".");
        System.out.println("The standard deviation is " + stdDev + ".");
    }
}

【讨论】:

  • 这很有帮助,但我将如何单独访问这些输入以从均值中减去然后将它们平方?
  • 这没有给出标准差的正确答案。
【解决方案4】:

这是带有循环的更新代码。

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    double sum = 0;
    double sqSum = 0;

    System.out.println("Enter 10 numbers: separte by space");
    for ( int i = 0 ; i < 10 ; i++){
        double val = input.nextDouble();
        sum += val;
        sqSum += val * val;
    }

    double mean = sum / 10;
    double stdDev = sqSum / 10 - mean * mean;
    System.out.println("The mean is " + mean + ".");
    System.out.println("The standard deviation is " + stdDev + ".");
}

【讨论】:

  • 这可以通过一个循环来实现
  • 是的,我们可以做到这一点
  • 请注意,发帖者不希望使用数组。
  • @MatthewCliatt 感谢您指出这一点。我修改了答案。
  • 用于 stdDev 的函数是用于方差的。标准差是方差的平方根。
猜你喜欢
  • 2012-11-16
  • 1970-01-01
  • 2016-07-24
  • 2020-05-22
  • 2017-10-09
  • 2019-01-25
  • 1970-01-01
  • 2020-12-26
  • 2020-04-15
相关资源
最近更新 更多