繁体   English   中英

如何创建包含100个随机整数的一维数组并找到平均值,标准差和方差?

[英]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.

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