繁体   English   中英

使用循环查找均值和标准差

[英]Find mean and standard deviation using loops

我的目标是计算从用户输入中获得的 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); 
  }
}

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

  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); 

使用while循环,迭代input.nextDouble()的值作为循环的条件。 只要有输入,循环就会继续。 同时,记录输入的数量和数量的总和。 仅凭这 2 个数字,您就可以计算平均值和标准差。 如果您查看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 + ".");
    }
}

要对 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 + ".");

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

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 + ".");
}

如果你能学会数组,做这些东西就容易多了。 可能只需要半小时,但它会让您的编程生活变得轻松很多。这是我提供的使用数组的十个数字的均值和标准差的示例:

 import java.util.*;  
     class Test  
     {  
     public static void main (String [] args)  
       {  
          System.out.println("Enter 10 numbers to find standard deviation");  
          Scanner in = new Scanner (System.in);  
          double[] arr= new double [10];  
          double sum=0, mean=0;  
          for (inti=0; i<10; i++) //Take input in the array  
         {  
               System.out.print("Enter a number : ");  
               arr[i]=in.nextDouble();  
               sum+=arr[i]; //sum of all elements  
         }  
          mean=sum/10;  
          sum=0;  
          System.out.println("Mean : "+mean); //Display mean of all elements  
          double [] temp= new double[10];  
          for (inti=0; i<10; i++) //calculate standard deviation  
         {  
               temp[i]=Math.pow((arr[i]-mean),2);  
               sum+=temp[i];  
         }  
          mean=sum/10;  
          double deviation=Math.sqrt(mean);  
          System.out.println("Deviation : "+ deviation);  
       }  
     }  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM