这段代码用来查找第1001个素数:
public class problem7 {
public static void main(String[] args) {
int[] myarray = new int[1001];
int j = 0;
boolean prime = false;
for(int i = 2;;i++){
for(int k = 2;k <i; k++){
if(i== (k-1) && i % k != 0){
prime = true;
}
if (i % k == 0){
prime = false;
prime = true;
}
if (prime){
myarray[j] = i;
}
if(j==1000){
System.out.println(myarray[1000]);
}
j++;
}
}
}
}
它告诉我数组越界了。不知道为什么。如有任何帮助,不胜感激
要解决这个特殊的问题,您必须在找到所需的数字后停止代码(通过在打印找到的值后执行return
):
if(j==1000){
System.out.println(myarray[1000]);
return;
}
这将避免下次调用j++;
,以及下次调用myarray[j] = i;
时的ArrayIndexOutOfBoundsException
。
if(j==1000){ //if j is 1000
System.out.println(myarray[1000]);
}
j++; // now j is 1001
您没有停止执行。在下一次迭代中,您将尝试执行
if (prime){
myarray[j] = i; // your j is 10001
}
因此,要么从两个循环中断开,要么在打印myarray[1000]
后返回。