【发布时间】:2023-05-23 08:51:02
【问题描述】:
创建一个程序,使用户能够输入一个整数 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 !
【问题讨论】:
-
在循环结束后进行计算。否则,您将除以 0。此外,您还需要查找 int 除法,然后避免这样做。
-
那么在 if 语句之后?
-
我试图让它,如果它是一个负数它不计算它或什么的
-
if 语句不是循环。想一想——你正在使用什么循环,它在哪里结束?在用户输入所有数字之前进行计算有什么好处?
-
感谢您的建议!
标签: java