我以为我有这个数字,我非常有信心它会起作用。不幸的是,它没有。
下面的代码应该返回平均值,输入的值的数量,然后计算std Var。我得到它返回平均值和计数,但std var结果是关闭的。使用值5,6,8和9我应该得到std var 1.83的结果,我得到的东西离7.17。
我知道我的错误是我计算std Dev的方式,但我很确定我做得对。
这是我的代码:
/**
This class is used to calculate the average and standard deviation
of a data set.
*/
public class DataSet{
private double sum;
private double sumSquare;
private int counter;
/**Constructs a DataSet object to hold the
* total number of inputs, sum and square
*/
public DataSet(){
sum = 0;
sumSquare = 0;
counter = 0;
}
/**Adds a value to this data set
* @param x the input value
*/
public void add(double x){
sum = sum + x;
sumSquare = sumSquare + x * x;
counter++;
}
/**Calculate average of dataset
* @return average, the average of the set
*/
public double getAverage(){
double avg = sum / counter;
return avg;
}
/**Get the total inputs values
* @return n, the total number of inputs
*/
public int getCount(){
return counter;
}
public double getStandardDeviation(){
double sqr = sumSquare / counter;
double stdDev = Math.sqrt(sqr);
return stdDev;
}
}
这是我的跑步者计划:
import java.util.Scanner;
class DataSetRunner
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
DataSet data = new DataSet();
boolean done = false;
while (!done)
{
System.out.println("Enter value, Q to quit: ");
String userInput = input.next();
if (userInput.equalsIgnoreCase("Q"))
done = true;
else
{
double x = Double.parseDouble(userInput);
data.add(x);
}
}
System.out.println("Average = " + data.getAverage());
System.out.println("Count = " + data.getCount());
System.out.println("The Standard Deviation is = " + data.getStandardDeviation());
}
答案 0 :(得分:4)
您的计算不正确。
Standard deviation基于差异与平均值的平方和。
您只是对数据值的方块进行求和。
一旦您知道可以使用此值计算标准偏差,您必须首先计算平均值(即平均值),然后。
正确的程序是(引自wikipedia):
要计算总体标准偏差,首先计算每个数据点与均值的差值,然后将每个数据点的结果平方:
接下来,计算这些值的平均值,并取平方根:
基本上,你无法“随时”计算标准偏差。