我正在尝试使用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;
}
答案 0 :(得分:1)
由于你显然是编程的初学者以及Java的新手,所以这里有一些一般的建议:
始终遵循编码标准/惯例。它们可以让您的代码对其他人更具可读性。甚至在一些小小的例子中也要这样做,这样你就养成了在重要的情况下这样做的习惯。
Java中的“通用”约定方法和变量名称以小写字母开头。你已经用大写字母开始了它们。将StandardDeviation
更改为standardDeviation
,将Variance
更改为variance
,依此类推。
选择准确反映预期含义的变量和方法名称。例如:
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;
}
}