2013-03-26 121 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 
}