计算广义谐波数时的数组索引越界错误

Array Index Out Of Bounds Error When Computing Generalized Harmonic Numbers

提问人:silly_bear_11 提问时间:7/5/2023 最后编辑:silly_bear_11 更新时间:7/6/2023 访问量:42

问:

java 初学者。尝试制作接受 2 个命令行参数 (n, r) 并使用 for 循环来计算 r 阶的第 n 个广义谐波数的代码。

我一直收到错误“ArrayIndexOutOfBoundsException”,我不知道为什么。在循环中,我尝试了 i < n 和 i<=n 并不断得到相同的结果。

代码如下:

public class Main {
    public static void main(String[] args) {
        int n = Integer.parseInt(args[0]);
        int r = Integer.parseInt(args[1]);
        float sum = 0;
        for (int i = 1; i <= n; i++) {
            sum += 1 / Math.pow(i, r);
        }
        System.out.println(sum);
    }
}

编辑:我正在从mac命令行运行程序,它根本不允许我输入参数。对不起,如果这遗漏了一些非常明显的东西。

Java for 循环 indexOutofboundsException

评论

1赞 Federico klez Culloca 7/6/2023
编辑您的问题以添加您运行程序的方式。
0赞 Marc Le Bihan 7/6/2023
只有命令行才能给出我在这里看到的结果。你确定你用来调用它的参数真的达到了?ArrayInexOutOfBoundsExceptionargsjava -cp myClass 5 3
0赞 matt 7/6/2023
你访问数组的唯一位置是当你得到 n 和 r 时。您似乎没有正确提供参数。
0赞 Nathan Hughes 7/6/2023
请注意,问题需要包括具体错误,并且需要包括重现说明。

答:

3赞 Andrej Istomin 7/6/2023 #1

我相信这个误差与你的谐波数无关。输入值是问题所在。如果您仔细查看异常,您会发现它被抛出在从命令行参数中提取参数的行中。因为这是您在代码中使用数组的唯一位置。args[N]

请尝试以下代码:

public static void main(String[] args) {
    if (args.length != 2) {
        System.out.println("The program requires 2 arguments. You provided " + args.length);
        return;
    }
    int n = Integer.parseInt(args[0]);
    int r = Integer.parseInt(args[1]);
    float sum = 0;
    for (int i = 1; i <= n; i++) {
        sum += 1 / Math.pow(i, r);
    }
    System.out.println(sum);
}

你会看到你的论点不知何故没有提供。检查如何运行程序。

评论

1赞 silly_bear_11 7/6/2023
谢谢!我实际上把我的论点输入错了,我为这样一个愚蠢的错误感到抱歉。
1赞 Andrej Istomin 7/6/2023
@silly_bear_11没问题,它总是发生在:)如果我的回答有帮助,如果你能打这个绿色的复选框,我将不胜感激,你接受了它:)提前致谢!
1赞 silly_bear_11 7/7/2023
刚刚点击复选标记,现在它在我这边说它被接受。再次感谢!