0

このメソッドを使用するアプリをテストしています

public double range(double[] myArray1, double[] myArray2, double[] myArray3) {
    int count=myArray1.length;

    double dfw = (3 * count) - 3;
    double msw = totalval / dfw;
    double critical = (2 / count) * (msw / 2);

    double range = Math.sqrt(critical);
    double crange = 3.95* range;

    return critical;
}

長さ 4 の 3 つの配列の入力に対してすべての値を出力しようとしました。

dfw=9
msw=341.6388888888889
critical=0;
range=0;
crange=0;

すべての値は正しく計算されますが、実行が に達するcriticalと、値は計算されません。

これはどのように可能ですか?critical結果が常に 0 で間違った出力が発生するのはなぜですか?

4

2 に答える 2

4

問題は、それ(2 / count)が操作であり、 ifIntegerを返すことです。 0count > 2

浮動小数点演算に変更するには、次のように浮動小数点リテラルを使用できます。

double critical = (2.0 / count) * (msw / 2);
于 2013-05-26T11:49:05.123 に答える
1

整数演算を実行しています。int myvalue = 1/2あなたにあげますmyvalue = 0;

キャストを実行できます

double critical = (2.0 / (double)count) * (msw / 2.0);

countからに昇格intするdouble

于 2013-05-26T11:49:37.700 に答える