使用do while循环计算平均值和标准偏差

时间:2016-02-16 04:16:33

标签: java

我正在尝试编写一个程序,询问用户一系列正值,并计算当用户输入-1时具有输入停止的那些值的平均值和标准差。然而,我似乎平均下来了。我似乎无法获得标准偏差。

到目前为止,这就是我所拥有的。

import java.util.Scanner;

public class HW0402

{

    public static void main(String[] args) 
    {
        Scanner input = new Scanner(System.in);



        double x;

        double sum = 0;

        double average = 0;

        double dev = 0;

        double var = 0;

        double sqrx = 0;

        int n = 0;

        do 
        { 
            System.out.println("Enter positive values, enter -1 to end");
            x = input.nextInt(); 
            if (x == -1)
            {
                break;
            }

            sum += x;
            n++;
            average = sum / n;      
            sqrx += Math.pow(x-average,2);
            var = sqrx / (n-1);
            dev = Math.sqrt(var);


        } while (x != -1);

        System.out.println("Average: " + average);
        System.out.println("Deviation: " + dev);

    }
}

当简单地计算sqrx + = x- average

时,我似乎得到奇数结果,例如小数

我是java的新手并且没有选择这个问题的替代方案,如果有人指出我应该做的正确的方向,或者解释我做错了什么,我会很高兴。

对于我所犯的任何新手错误提前道歉。

1 个答案:

答案 0 :(得分:0)

int n = 0;
int K = 0;
double Sum = 0;
double Sum_sqr = 0;
do { 
    System.out.println("Enter positive values, enter -1 to end");
    x = input.nextInt(); 
    if (x == -1)
    {
        break;
    }
    if ( n == 0 ) K = x;
    n++;
    Sum += (x - K);
    Sum_sqr += (x - K) * (x - K);
} while (x != -1);
double mean = K + Sum / n;
double varPop = (Sum_sqr - (Sum*Sum)/n) / (n);
double varSample = (Sum_sqr - (Sum*Sum)/n) / (n-1);
double devPop = Math.sqrt(varPop);
double devSample = Math.sqrt(varSample);

参考Wikipedia: Computing Shifted Data。此外,人口或样本也有所作为。