计算java中的标准差

时间:2016-10-08 05:16:59

标签: java loops math standard-deviation

我是否计算循环中的标准偏差。我知道计算标准偏差的公式,我只想知道如何将用户输入用于计算。我是编程的新手,请解释一切。我也不介意我试图写出标准偏差公式的抱歉尝试,这不仅仅是为了更多地理解SD。

import java.util.Scanner; 

public class readFromKeyboard { 
  public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    String inStr = input.next(); 
    int n;
    int i;
    int count = 0; 
    int min = Integer.MAX_VALUE;
    int max = Integer.MIN_VALUE; 
    double average=0;
    int sum;
    double deviation = 0;

    while (!inStr.equals("EOL")) { 
      count++; 
      n = Integer.parseInt(inStr); 
      min = Math.min(min, n);
      max = Math.max(max, n);
      System.out.printf("%d ", n); 
      inStr = input.next(); 
      average += n;
      // really bad attempt here
      deviation = math.pow(n / average,2) ++ / mean sqrt(); 
    } 
    average = average/count;
    System.out.println("\n The average of these numbers is " + average);
    System.out.printf("The list has %d numbers\n", count); 
    System.out.printf("The minimum of the list is %d\n", min);
    System.out.printf("The maximum of the list is %d\n", max);

    input.close(); 
  } 
}

2 个答案:

答案 0 :(得分:0)

您的代码首先遇到一些问题:

您对average的使用非常混乱,因为您首先将其用作累加器,然后将其除以元素数。更好的风格是使用单独的累加器变量来计算总和,然后计算for循环外的平均值。

话虽这么说,一旦计算了平均值,你就可以再次遍历你的值,并保留一个累加器变量,每个数字的增量乘以它与平均值之差的平方,沿着以下几行:

varianceSum += Math.pow(num - average, 2);

一旦所有数字相加,您可以将varianceSum除以count以获得方差(可能需要检查以避免除以0),并使用Math.sqrt()查找标准差。

至于从用户那里获取输入,您需要为每个号码重复调用input.nextInt()。您可以让用户在开头输入输入数量,然后在for循环中循环输入它们,或者您可以使用Scanner的hasNext()方法读取直到输入结束。

答案 1 :(得分:0)

您应该在循环内调用input.next();以重复获取用户输入。

对于记录,您可以使用in.nextInt()而不是input.next();,因为您在这里处理整数。您对deviation的计算不明确。