2013-05-26 152 views
0

我測試使用此方法的獲取始終爲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; 
} 

我試圖打印所有值3個數組所有與長度爲4的輸入端的應用程序;

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

所有值的計算都是正確的,但是當執行達到critical時,不計算這些值。

這是怎麼回事?爲什麼critical結果始終爲0會導致錯誤的輸出?

+0

另外:'3,95 * range'的','是一個錯字,對不對?應該是'.' – laalto

+0

@laalto是3.95是一個trascription錯誤 – AndreaF

回答

4

問題是(2/count)Integer操作,如果count > 2將返回0

把它改成一個浮點操作,您可以使用一個浮點文字,就像這樣:

double critical = (2.0/count) * (msw/2); 
+0

打了我一秒:) +1 – mwerschy

1

您正在執行整數運算。 int myvalue = 1/2會給你myvalue = 0;

,你可以進行一次造型

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

促進從intcountdouble