For循环返回错误结果

For-loop returning wrong results

提问人:lklk 提问时间:2/1/2023 最后编辑:VicenteJankowskilklk 更新时间:2/1/2023 访问量:146

问:

我在解决以下任务时得到了错误的结果:

广义谐波数。编写一个程序 GeneralizedHarmonic.java,它采用两个整数命令行参数 n 和 r,并使用 for 循环来计算 r 阶的第 n 个广义谐波数,该数由以下公式定义: 公式


public class GeneralizedHarmonic {

    public static void main(String[] args) {

        int a = Integer.parseInt(args[0]);
        int b = Integer.parseInt(args[1]);
        int i;
        double sum = 0;
        for (i = 0; i <= a; i++) {
            sum += 1 / Math.pow(i, b);
        }
        System.out.println(sum);
    }
}

这是我的代码,但我无法获得正确的测试输出。输出结果始终为 。测试输出Infinity

java 循环 for-loop infinity

评论

0赞 f1sh 2/1/2023
为什么这不是正确的测试输出?公式的示例输出表明 H(3,2) 近似等于 。程序的输出与此匹配。1.361111
1赞 marstran 2/1/2023
请将公式和预期的输出作为文本直接复制到您的问题中。我不会点击你的链接。
0赞 alalalala 2/1/2023
但是我们不知道什么是“广义谐波数”!

答:

0赞 VicenteJankowski 2/1/2023 #1

你已经在for循环中启动了,所以你的谐波数的第一个元素不是,而是![\frac{1}{0^{b}}\frac{1}{1^{b}}int i = 0for (i = 0; i <= a; i++)

有效的代码:

public class GeneralizedHarmonic {

    public static void main(String[] args) {

        int a = Integer.parseInt(args[0]);
        int b = Integer.parseInt(args[1]);
        double sum = 0;
        for (int i = 1; i <= a; i++) {
            sum += 1 / Math.pow(i, b);
        }
        System.out.println(sum);
    }
}