[英]How can I get standard deviation without using arrays in Java?
使用双浮点数据计算任何给定输入的计数,平均值和标准偏差。
每次我运行程序时,它都会给我计数和平均值,但是我的标准偏差显示为NaN。
import java.util.Scanner;
public class Final
{
public static void main (String[]args)
{
Scanner in = new Scanner(System.in);
System.out.print("Enter a range of digits to recieive 1. Count , 2. Average , 3. StdDvn");
double input = in.nextDouble();
double count = 1;
double sum = 0;
double sumsquared = sum * sum;
double std = 0;
while (in.hasNextDouble())
{ double value = in.nextDouble();
sum = input += value;
count++;
}
double average = sum / count;
std = Math.sqrt((sumsquared-(sum/count)) / (count - 1));
System.out.println("Your count of numbers is : " + count);
System.out.println("Your average of numbers is : " + average);
System.out.println("Your standard deviation of numbers is : " + std);
}
}
您的sumsquared
变量始终为0
因为您是在初始化double sum=0;
之后立即从0*0
计算得出的double sum=0;
。
这部分应移到总和下方。
此外,要在不使用循环的情况下计算不带数组的标准偏差,您需要知道以下3个值:
公式 : E[X^2]-(E[X])^2
参见Wikipedia 。 ^2
表示当然是squared
。
public static void main (String[]args)
{
Scanner in = new Scanner(System.in);
double count = 10.0; // how many numbers are entered, e.g.: 10
double sum1 = 0.0; // sum of the numbers
double sum2 = 0.0; // sum of the squares
System.out.println("Enter 10 numbers: ");
for (int i=0; i < 10; i++) {
double n = in.nextDouble();
sum1 += n;
sum2 += n * n;
}
double average = sum1 / count;
double variance = (count * sum2 - sum1 * sum1) / (count * count);
double stddev = Math.sqrt(variance);
System.out.println("Your count of numbers is : " + count);
System.out.println("Your average of numbers is : " + average);
System.out.println("Your standard deviation of numbers is : " + stddev);
}
您的sumsquared
是零。 因此,您在标准偏差中使用的值为0
。 这是重新sumsquared
的解决sumsquared
。
编辑:我认为您的std
是不正确的。 您必须先找到平均值。 在平方根内,找到( x - mean)
的总和,其中x是您的数据,然后将结果除以count - 1
。
public static void main (String[]args)
{
Scanner in = new Scanner(System.in);
System.out.print("Enter a range of digits to recieive 1. Count , 2. Average , 3. StdDvn");
double input = in.nextDouble();
double count = 1;
double sum = 0;
double std = 0;
while (in.hasNextDouble())
{ double value = in.nextDouble();
sum = input += value;
count++;
}
double sumsquared = sum * sum;
double average = sum / count;
std = Math.sqrt((sumsquared-(sum/count)) / (count - 1)); /* fix this formula */
System.out.println("Your count of numbers is : " + count);
System.out.println("Your average of numbers is : " + average);
System.out.println("Your standard deviation of numbers is : " + std);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.