我正在尝试编写一个程序,询问用户一系列正值,并计算当用户输入-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的新手并且没有选择这个问题的替代方案,如果有人指出我应该做的正确的方向,或者解释我做错了什么,我会很高兴。
对于我所犯的任何新手错误提前道歉。
答案 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。此外,人口或样本也有所作为。