-1

我正在尝试使用 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;
}
4

2 回答 2

1

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

  1. 始终遵循编码标准/约定。它们的存在是为了使您的代码对其他人更具可读性。即使在小的一次性示例中也要这样做,以便您养成在重要的情况下这样做的习惯。

  2. 方法和变量名称以小写字母开头是 Java 中的“通用”约定。你已经用大写字母开始了它们。更改StandardDeviationstandardDeviation, Variancetovariance等等。

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

    • Dog显然是没有意义的。
    • TheArrayAssingment可能有意义,但我无法弄清楚。
    • StandardDeviationFormula不准确。它不包含公式。它包含一个值,该值是应用公式的结果。

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

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

于 2012-07-22T01:45:58.617 回答
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;
    }
}
于 2012-07-22T01:20:05.183 回答