埃拉托色尼筛法,ArrayIndexOutOfBoundsException,输出为合数

Sieve of Eratosthenes, ArrayIndexOutOfBoundsException, output is composite number

我尝试编写埃拉托色尼筛法算法,我收到 ArrayIndexOutOfBoundsException 但我似乎不明白为什么,如果我更改限制,在打印时它只显示合数,如果可以的话,下面的代码会有所帮助.

public static Boolean[] solution(int N) {
        Boolean[] isPrime = new Boolean[N];
        isPrime[0] = false;
        for(int i = 1; i <= N; i++) {
            isPrime[i] = true;
        }

        for(int i = 2; i <= N; i++) {
            if(isPrime[i]== true) {
                System.out.println(i);
                for(int j = 2; (j * i) < N; j++) {
                    int k = j * i;
                    isPrime[k] = false;
                }

            }
        }

    return isPrime;

i <= N; 导致错误

for(int i = 1; i <= N; i++) {
            isPrime[i] = true;
}

例如

如果 N=4 那么当 i=4 时你会得到错误。 isPrime[4] 导致 OutOfBounds 异常,因为长度为 4.arrays 是基于零索引的。所以您可以访问的最大索引是 3.isPrime[3]

您可以通过将循环更改为 for(int i = 1; i < N; i++) {

来避免此错误

但是我不确定埃拉托色尼算法是什么。我希望你能改变你的代码记住数组是基于零索引的

Boolean[N] 创建一个包含 N 个元素的数组,因此,由于索引从 0 开始,因此最后一个索引是 N-1。 错误是for循环中的i<=N

引起的