2016-03-08 92 views
2

我的目标是计算从用户输入中获得的10个数字的标准偏差和使用循环查找平均值和标准差

我只学到了,而我的班级里有

问题: 我如何分配给每个用户输入(环内),以一个独立的变量,到后来比较平均,发现标准偏差?

(我还没有在我的课教给数组。所以,我必须解决这个问题,而无需使用数组)

我做的程序很长的一个单调乏味的方式,但如果能提供更多的代码需要显示我可以做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); 
    } 
} 
+0

阵列将很好地在这里工作。你知道是否可以使用一个? –

+0

它只是使用循环。我修改了这个程序,并更新了下面的代码 –

+0

添加代码示例 – khuderm

回答

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

啊。太棒了。除了存储所有10个整数之外,我想不出任何其他方式来计算它。从视觉上看,这有助于我更彻底地理解计算。因此,不用每个整数执行计算,只需使用不同的总和即可执行。 –

0

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

好抓。不知道我在那里想什么。固定 – khuderm

+0

这很有帮助,但我将如何分别访问这些输入以从平均值中减去然后平方? –

+0

这并没有给出标准偏差的正确答案。 –

0

对于总结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 + "."); 
+0

硬编码的东西总是不好的做法 – khuderm

+0

你是什么意思?我只是提供一个使用循环的例子,就像用户所要求的那样?因为用户不能使用数组,所以这只是解决他的问题的一种可能方案。 –

0

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

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

这可以通过一个循环来实现 – khuderm

+0

是的,我们可以做到这一点 –

+0

请注意,海报不希望使用数组。 –

0

如果你可以学习数组,那么做这些事情是非常容易的。可能这将需要短短半小时内,但它会使你的编程生活了很多easy.Here的我使用数组提供均值和10个数字标清的例子:

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