无限循环代码

时间:2013-03-26 01:44:38

标签: java

我正在尝试编写一个Integrate类,它将使用Trapezoidal规则为我提供函数的积分。出于某种原因,代码我从未解析为值并且仍然停留在“sum + =”步骤中:

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 个答案:

答案 0 :(得分:4)

你将i声明为int,所以当你向它添加一个double(1/3)时,它会向下舍入并保持相同的值。

将我变为双人。

事实上,你应该把所有东西都变成双倍。

答案 1 :(得分:1)

您的代码在类型转换方面存在问题,特别是在循环增量表达式i + = h。

在你的情况下,如果h是值为0.2的double,并且i是整数,则0.2将被转换为0。

为了说明这一点,请尝试运行以下代码示例:

public static void main(String[] args) {

    int i = 1;
    i += 0.2;

    System.out.println(i); // will always output 1
}
相关问题