[英]Calculate standard deviation of an array of integers in one for cycle without knowing average in advance
[英]How to create a single dimensional array containing 100 random integers and find the Average value, Standard Deviation and Variance?
我尝试过尝试,但是我认为自己做错了。 我是初学者级程序员,我确实需要帮助。 我觉得我已经接近答案了,但是我不确定程序有什么问题。 我尝试通过对方差结果求平方以求标准偏差来检查我的答案,但它们不匹配。
import java.util.Random;
public class Lab6 {
public static void main(String[] args) {
System.out.println("The Average Value is:"+avgValue());
System.out.println("The Standard Deviation is:"+stdDev());
System.out.println("The Variance is:"+Var());
}
public static int randomFill(){
Random rand = new Random();
int randomNum = rand.nextInt();
return randomNum;
}
private static int[] anArray;
public static int[] list() {
anArray = new int[100];
for(int i=0;i<anArray.length;i++)
{
anArray[i] = randomFill();
}
return anArray;
}
private static int sum;
public static int avgValue() {
int []a = list();
for (int e:a)
{
sum +=e;
}
int n=100;
sum=sum/n;
return sum;
}
private static int pwr;
public static int stdDev() {
int []b = list();
int dev=0;
for (int e:b)
{
dev=(e-sum)+dev;
}
pwr=(dev*dev)/99;
double root=Math.sqrt(pwr);
return pwr;
}
public static int Var() {
int c= pwr;
int opp=c*c;
return opp;
}
}
自从我进行统计以来已经有一段时间了,但是我可以指出,您的avgValue()方法和stdDev()正在针对两个不同的int数组进行计算。 调用list()时,每次都会得到一个不同的整数数组,并覆盖anArray。
我建议在您的main方法内创建数组,然后将其作为参数传递给其他方法。 如果要走自己的路线,请更改“ int [] b = list();” 改为“ int [] b = anArray;” 你应该没事的
总的来说,我认为您可能想尝试进一步研究方法参数和变量范围以改善Java。 继续努力; 它变得更容易。
我没有正确地记得方差和标准偏差公式,但是与代码中的编程逻辑相关的一个错误是,您在计算平均值时调用一次list()
,而在计算标准偏差时调用一次。
每次调用list()
方法都会返回一个带有新随机值的新数组。 因此,从本质上讲,即使您根据代码正确计算了标准偏差,您考虑的平均值(即sum
变量)也对应于其他数组的平均值。
public static void main(String... args) {
int[] arr = createRandomArray(100);
System.out.printf(Locale.US, "The Average Value is: %.2f\n", mean(arr));
System.out.printf(Locale.US, "The Standard Deviation is: %.2f\n", standardDeviation(arr));
System.out.printf(Locale.US, "The Variance is: %.2f\n", variance(arr));
}
public static int[] createRandomArray(int total) {
int[] arr = new int[total];
Random random = new Random();
for (int i = 0; i < arr.length; i++)
arr[i] = random.nextInt(100);
return arr;
}
public static double mean(int[] arr) {
return (double)Arrays.stream(arr).sum() / arr.length;
}
public static double standardDeviation(int[] arr) {
double mean = mean(arr);
double sum = IntStream.range(0, arr.length)
.boxed()
.map(i -> Math.pow(arr[i] - mean, 2))
.mapToDouble(d -> d)
.sum();
return Math.sqrt(sum / arr.length);
}
public static double variance(int[] arr) {
return Math.pow(standardDeviation(arr), 2);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.