2013-03-26 8 views
0

Я пытаюсь закодировать класс Integrate, который даст мне интеграл функции, используя правило Трапеции. По какой-то причине, код я никогда решает значение и остается застрял в «Сумме + =» шаг:Код бесконечного цикла

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

Не пытайтесь «полужирным» кодом. Вместо этого используйте комментарий. –

+1

Я мог представить, что 'h' всегда 0. – Sebastian

+0

Получил это. Все изменилось до двойного – Haque1

ответ

4

Вы объявлен я, как межды, поэтому при добавлении двойного (1/3) к нему он округляется и сохраняет ту же ценность.

Измените i, чтобы быть двойным.

Фактически, вы должны сделать все двойным.

+0

«вы должны сделать все вдвойне» ... возьмите это с солью. Есть много случаев, когда вы должны использовать int вместо double. – ecbrodie

1

У вашего кода возникла проблема с литьем типа, в частности, на выражение приращения цикла i + = 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 
}