标准偏差等于零?

时间:2015-11-09 21:01:28

标签: java arrays

在我的家庭作业活动中,它要求我根据以下说明编写代码:

一组数字的标准差是衡量其价值差异的指标。它被定义为每个数字和平均值之间的平方差的平均值的平方根。计算数据中存储的数字的标准差:

  1. 计算数字的平均值。

  2. 对于每个数字,从平均值中减去它并将结果平方。

  3. 查找步骤2中计算的数字的平均值。

  4. 找到步骤3结果的平方根。这是标准偏差。

  5. 编写代码以计算数据中数字的标准差,并将结果存储在double sd中。

    示例:double [] data = {1.0,2.0,3.0,4.0,5.0};

    //预期标准差(输出):1.4142136

    //My code:
    
    double mean1=0;
    double mean2=0;
    double sum1=0;
    double sum2=0;
    double sd=0;
    //calculate sum from arrays of doubles
    
    for(double a:data)
    {
        sum1+=a;
    }
    
    //calculate mean
    
    mean1=sum1/data.length;
    
    //creates new array for step2
    
    double newData[]=new double[data.length];
    for(int k= 0; k>newData.length; k++)
    {
        double s=0;
        newData[k]=data[k];
        s=Math.pow((mean1-data[k]),2);
        newData[k]=s;
    
    }
    
    //calculate sum of the new array
    for(double b:newData)
    {
        sum2+=b;
    }
    
    //calculate mean
    mean2=sum2/newData.length;
    
    //calculate standard deviation by sqrt
    sd+=Math.sqrt(mean2);
    

    当我编译时,我的标准差为0.0 ???!

    这是我不明白的地方。 我在纸上做了代码 - 我的平均值为3.0 2.I用数据[]和平方减去mean1得到{4,1,0,1,4} 3.I添加并划分为找到等于2的mean2

    我√2并得到1.4142136就像预期的结果一样。

    论文:为什么我得到0.0为sd ??

1 个答案:

答案 0 :(得分:5)

您的for循环条件不正确;不会输入for循环,只留下newData个零。

for(int k= 0; k>newData.length; k++)

尝试<

for(int k = 0; k < newData.length; k++)