标准偏差的逻辑错误

时间:2013-10-29 01:52:29

标签: java

我已经为家庭作业编写了这个Java程序,但它产生了逻辑错误,我不确定为什么。这是我的代码: 我也不知道为什么公共类StndredDev {决定从代码块中删除自己,但它很容易阅读甚至如此。 第一次发布,找不到逻辑错误标记。

编辑:问题解决了,我会发布完成的代码,但这是一个家庭作业,所以maby它应该删除?我是新来的,所以我不知道发布已完成的家庭作业的政策

import java.util.Scanner;

public class StndredDev {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        final int numOfDigits=10;

        // declare double array
        double [] numbers = new double [numOfDigits];

        // promt user
        System.out.println("Enter ten numbers : ");
        double k = 0;
        double j = 0;
        double deviation = 0;

        //Begin computing mean
        for (int i=0; i < numOfDigits; i++) {
            numbers[i] = input.nextDouble();
            k += numbers[i];
        }
        double mean= k/numOfDigits;

        // Display mean
        System.out.printf("The mean is %.2f", mean);

        //Begin computing standard deviation, I'm at a loss as to why this is still giving me logic errors.
        for(int m=0; m < numOfDigits; m++) {
            deviation = Math.pow((numbers[m]-=mean),2);
            j += deviation;
        }
        double stndrdDeviation = j/numOfDigits;
        double standardDeviation = Math.sqrt(stndrdDeviation);

        //Display Standard Deviation
        System.out.printf("the standard deviation is: %.6f", standardDeviation);
    }
}

1 个答案:

答案 0 :(得分:1)

  1. deviation = Math.pow((numbers[m]-=mean),2); - 这条线对我没有意义。你想要的是deviation = Math.pow(numbers[m] - mean, 2);我认为这是你提到的错误。

  2. 不要定义您不需要的许多变量。重复使用它们。例如,

    double stdev = 0;
    for(int i = 0; i < numOfDigits; i++){
        stdev += Math.pow(numbers[i] - mean, 2);
    }
    stdev = stdev/numOfDigits;
    stdev = Math.sqrt(stdev);
    

    此外,您似乎假设每个循环都需要一个单独的变量。你没有。 im都是本地的,并且只在这些循环中独立存在,将它们命名为i都没有错,因为它们做同样的事情。