繁体   English   中英

计算平均值和标准偏差

[英]computing mean and standard deviation

创建一个程序,使用户能够输入整数N,然后读取N个双精度值,并打印其平均值(平均值)和样本标准差(其与平均值之差的平方和的平方根除以N) -1)。 到目前为止,我有这段代码

import java.util.Scanner;

public class AVGDevi

{

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 an integer:");
        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<= 0);

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

}

测试用例:

5
1
2
3
4
5

当前获得此输出

Enter an integer:
Average: 5.0
Deviation: NaN

输出应为

Enter an integer: Enter a number: Enter a number: Enter a number: Enter a number: Enter a number: Average value is: 3.0
The standard deviation is: 1.58

我不是100%知道我在做错什么,任何帮助都很棒:D!

您在do-while防护中使用x <= 0 ,因此,如果输入正数,它将在第一次迭代后退出。 另外,当您输入第一个数字时,您将具有var = sqrx / (n-1) ,但是对于n=1 ,您将被0除。正如《 Hovercraft Full Of Eels》所建议的那样,我将数字添加到向量中或ArrayList,并在收到所有输入后进行计算。

您只能使用while循环,而不能使用do-while循环,如下所示:

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




double y=-1;

double sum = 0;

double average = 0;

double dev = 0;

double var = 0;

double sqrx = 0;

int n = 0;


    System.out.println("Enter an integer:");
    y = input.nextInt();
    double z=y;
    int i=0;
    double x[] = new double[(int)z];
    while(y-->0){

   x[i] = input.nextDouble();

    sum += x[i];
   i++;         
    n++;
    average = sum / n;      


    }
    i=0;
    while(z-->0){
        sqrx += Math.pow(x[i]-average,2);
        i++;
    }
 var = sqrx / (n-1);
    dev = Math.sqrt(var);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM