Java 累计发行

Java 累计发行,java,for-loop,cumulative-sum,Java,For Loop,Cumulative Sum,这是一个简单的问题,我有麻烦。这个问题需要我编写一个名为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(S

这是一个简单的问题,我有麻烦。这个问题需要我编写一个名为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;
}

}
公共课练习01{
公共静态最终整数上限=5;
公共静态void main(字符串[]args){
系统输出打印(分数总和(上限));
}
公共静态双分形和(整数n){
如果(n

(1/i)
正在处理整数,因此将生成整数形式的结果。将其更新为:

(1.0/i)

要获得分数结果而不是整数结果。

您需要键入cast to double

这样试试

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

}
公共课练习01{
公共静态最终整数上限=5;
公共静态void main(字符串[]args){
系统输出打印(分数总和(上限));
}
公共静态双分形和(整数n){
如果(n)