2013-03-26 119 views
0

我想編寫一個集成類,它會給我一個使用梯形法則的函數的積分。出於某種原因,我從來沒有代碼解析爲一個值,並保持停留在「總和+ =」步驟:無限循環代碼

public static double Trap(int exponent, int a, int b, int n) { 
    double h = (double) (b-a)/n; 

    double sum = 0; 
    for(int i = a; i <= b; i+=h) 
     sum += (Math.pow(i, exponent) + Math.pow(i+1, exponent))/2; //trouble! 

    return h * sum; 
} 

public static void main(String[] args) { 
    System.out.println(Trap(3,1,3,10)); //integral of x^3 from 1 to 3, 
    divided into 10 parts 
} 
+2

不要試圖「大膽」的代碼。改爲使用評論。 – 2013-03-26 01:45:36

+1

我可以想象'h'總是0. – Sebastian 2013-03-26 01:48:22

+0

明白了。把所有東西都改爲雙重 – Haque1 2013-03-26 01:52:34

回答

4

你宣佈我作爲一個int,所以當你加上一個雙(1/3)它向下滾動並保持相同的價值。

改變我是一個雙。

事實上,你應該把所有東西都加倍。

+0

「你應該把所有東西都變成雙重的......」儘管如此,還是要用一粒鹽。有很多情況下,你應該使用int而不是double。 – ecbrodie 2013-03-26 01:58:59

1

您的代碼在執行類型轉換時遇到了問題,特別是循環增量表達式i + = h。

在你的情況,如果h值爲0.2雙,而我是整數,0.2將被強制轉換爲0。

爲了說明這一點,請嘗試運行下面的代碼示例:

public static void main(String[] args) { 

    int i = 1; 
    i += 0.2; 

    System.out.println(i); // will always output 1 
}