-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 の「普遍的な」慣習です。すべて大文字で始めました。、などに変更StandardDeviationします。standardDeviationVariancevariance

  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 に答える