Проблема с накопленной суммой

Вот легкий, с которым у меня проблемы. Проблема требует, чтобы я написал метод под названием 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;
}

}

2 ответа

Решение

Вам нужно набрать приведение к двойному

попробуй так

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;
}

}

Операция

(1/i)

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

(1.0/i)

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

Другие вопросы по тегам