Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Eratosthenes筛,阵列索引BoundsException,输出为复合数_Java_Algorithm_Boolean_Indexoutofboundsexception - Fatal编程技术网

Java Eratosthenes筛,阵列索引BoundsException,输出为复合数

Java Eratosthenes筛,阵列索引BoundsException,输出为复合数,java,algorithm,boolean,indexoutofboundsexception,Java,Algorithm,Boolean,Indexoutofboundsexception,我试着写了一个Eratosthenes算法的筛子,我得到了ArrayIndexOutOfBoundsException,但我似乎不明白为什么,如果我改变了限制,在打印时它只显示复合数字,如果可以的话,代码下面有帮助 public static Boolean[] solution(int N) { Boolean[] isPrime = new Boolean[N]; isPrime[0] = false; for(int i = 1; i <

我试着写了一个Eratosthenes算法的筛子,我得到了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;
公共静态布尔[]解决方案(int N){
布尔值[]isPrime=新布尔值[N];
isPrime[0]=假;

for(int i=1;i
i
Boolean[N]
创建一个由N个元素组成的数组,因此,由于索引从0开始,最后一个索引是N-1。
该错误是由
iAlso造成的,
1
不是素数,因此循环应该从
2
开始。如果输入素数,如果删除等号,在出现素数之前不会只生成素数,提高精度的最佳方法是将布尔数组大小增加1,如:Boolean[]isPrime=新布尔[N+1];
for(int i = 1; i <= N; i++) {
            isPrime[i] = true;
}