Java Eratosthenes筛,阵列索引BoundsException,输出为复合数
我试着写了一个Eratosthenes算法的筛子,我得到了ArrayIndexOutOfBoundsException,但我似乎不明白为什么,如果我改变了限制,在打印时它只显示复合数字,如果可以的话,代码下面有帮助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 <
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;iiBoolean[N]
创建一个由N个元素组成的数组,因此,由于索引从0开始,最后一个索引是N-1。
该错误是由iAlso造成的,1
不是素数,因此循环应该从2
开始。如果输入素数,如果删除等号,在出现素数之前不会只生成素数,提高精度的最佳方法是将布尔数组大小增加1,如:Boolean[]isPrime=新布尔[N+1];
for(int i = 1; i <= N; i++) {
isPrime[i] = true;
}