2013-09-21 3 views
0

Вот простая проблема, с которой я столкнулся. Задача требует, чтобы я написал метод под названием fractionSum, который принимает целочисленный параметр и возвращает двойное число из суммы первых n членов.Проблема с совокупной суммой

например, если параметр равен 5, программа добавит все доли (1+ (1/2) + (1/3) + (1/4) + (1/5)). Другими словами, это форма суммы Римана.

По какой-то причине цикл for не накапливает сумму.

Вот код:

public class Exercise01 { 

public static final int UPPER_LIMIT = 5; 

public static void main(String[] args) { 
    System.out.print(fractionSum(UPPER_LIMIT)); 
} 

public static double fractionSum(int n) { 

    if (n<1) { 
     throw new IllegalArgumentException("Out of range."); 
    } 

    double total = 1; 

    for (int i = 2; i <= n; i++) { 
     total += (1/i); 
    } 

    return total; 
} 

} 

ответ

1

вам необходимо приведение типа в два раза

попробовать этот путь

public class Exercise01 { 

public static final int UPPER_LIMIT = 5; 

public static void main(String[] args) { 
    System.out.print(fractionSum(UPPER_LIMIT)); 
} 

public static double fractionSum(int n) { 

    if (n<1) { 
     throw new IllegalArgumentException("Out of range."); 
    } 

    double total = 1; 

    for (int i = 2; i <= n; i++) { 
     total += (1/(double)i); 
    } 

    return total; 
} 

} 
+0

Хорошо, спасибо за помощь. –

1

Операция

(1/i) 

работает над целыми числами и, следовательно, будет генерировать результат в терминах междунар. Обновите его до:

(1.0/i) 

, чтобы получить дробный результат, а не результат int.

Смежные вопросы