如何使用数组和for循环找到标准偏差?

时间:2012-07-22 01:04:41

标签: java

我正在尝试使用for循环找到数组的标准偏差。 我有一些可能有用的代码,但它给了我错误。 我很感激一些指导和帮助! : - )

以下是代码:

double StandardDeviation() {
    double Dog,Variance,StandardDeviationFormula;

    for (int k = 0; k < TheArrayAssingment.length; k++) {

         Dog = Dog + (TheArrayAssingment[k] - Average()) 
                      * (TheArrayAssingment[k] - Average());

         Variance = Dog / (TheArrayAssingment.length - 1);
         StandardDeviationFormula = Math.sqrt(Variance);

    }
    return StandardDeviationFormula;
}

2 个答案:

答案 0 :(得分:1)

由于你显然是编程的初学者以及Java的新手,所以这里有一些一般的建议:

  1. 始终遵循编码标准/惯例。它们可以让您的代码对其他人更具可读性。甚至在一些小小的例子中也要这样做,这样你就养成了在重要的情况下这样做的习惯。

  2. Java中的“通用”约定方法和变量名称以小写字母开头。你已经用大写字母开始了它们。将StandardDeviation更改为standardDeviation,将Variance更改为variance,依此类推。

  3. 选择准确反映预期含义的变量和方法名称。例如:

    • Dog显然毫无意义。
    • TheArrayAssingment可能有意义,但我无法理解。
    • StandardDeviationFormula不准确。它不包含公式。它包含一个应用公式的结果值。

    如果正确拼写方法和变量名称,它也会有所帮助......

    (也有例外。例如,大多数经验丰富的程序员认为,当意义不言而喻时,使用常规和缩写名称作为局部变量是完全可以接受的。例如,ex或{{1对于循环变量,e / i / j,对于迭代器对象,k。当您阅读更多其他人的代码时,您将去看/理解“成语”。)

答案 1 :(得分:0)

这样做:

package cruft;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * StatisticsUtil has statistics utility methods
 * @author Michael
 * @link
 * @since 7/21/12 7:30 PM
 */
public class StatisticsUtil {

    public static void main(String[] args) {
        List<Double> values = new ArrayList<>();
        for (String arg : args) {
            values.add(Double.valueOf(arg));
        }
        System.out.println(String.format("mean   : %10.4f", getMean(values)));
        System.out.println(String.format("median : %10.4f", getMedian(values)));
        System.out.println(String.format("std dev: %10.4f", getStandardDeviation(values)));
    }

    public static double getMean(List<Double> values) {
        double mean = 0.0;
        if ((values != null) && (values.size() > 0)) {
            for (double value : values) {
                mean += value;
            }
            mean /= values.size();
        }
        return mean;
    }

    public static double getStandardDeviation(List<Double> values) {
        double deviation = 0.0;
        if ((values != null) && (values.size() > 1)) {
            double mean = getMean(values);
            for (double value : values) {
                double delta = value-mean;
                deviation += delta*delta;
            }
            deviation = Math.sqrt(deviation/values.size());
        }
        return deviation;
    }

    public static double getMedian(List<Double> values) {
        double median = 0.0;
        if (values != null) {
            int numValues = values.size();
            if (numValues > 0) {
                Collections.sort(values);
                if ((numValues%2) == 0) {
                    median = (values.get((numValues/2)-1)+values.get(numValues/2))/2.0;
                } else {
                    median = values.get(numValues/2);
                }
            }
        }
        return median;
    }

    public static double getMean(double [] values) {
        double mean = 0.0;
        if ((values != null) && (values.length > 0)) {
            for (double value : values) {
                mean += value;
            }
            mean /= values.length;
        }
        return mean;
    }

    public static double getStandardDeviation(double [] values) {
        double deviation = 0.0;
        if ((values != null) && (values.length > 1)) {
            double mean = getMean(values);
            for (double value : values) {
                double delta = value-mean;
                deviation += delta*delta;
            }
            deviation = Math.sqrt(deviation/values.length);
        }
        return deviation;
    }

    public static double getMedian(double [] values) {
        double median = 0.0;
        if (values != null) {
            int numValues = values.length;
            if (numValues > 0) {
                Arrays.sort(values);
                if ((numValues%2) == 0) {
                    median = (values[(numValues/2)-1]+values[numValues/2])/2.0;
                } else {
                    median = values[numValues/2];
                }
            }
        }
        return median;
    }
}