Java ArrayIndexOutOfBoundsException:999
我试图制作一个数组来存储素数 . 我的代码如下所示:Java ArrayIndexOutOfBoundsException:999,java,Java,我试图制作一个数组来存储素数 . 我的代码如下所示: int primenumbers[] = new int [999]; int num = 6, a = 3, solution = 1; primenumbers[0] = 2; primenumbers[1] = 3; primenumbers[2] = 5; boolean flag = false; for(num = 6; num < = 143;num++){ // WORKS UNTIL NUM < =
int primenumbers[] = new int [999];
int num = 6, a = 3, solution = 1;
primenumbers[0] = 2;
primenumbers[1] = 3;
primenumbers[2] = 5;
boolean flag = false;
for(num = 6; num < = 143;num++){ // WORKS UNTIL NUM < = 142
for(int i = 2;i < num/2;i++){
if (num%i = = 0){
flag = true;
break;
}
if(!flag) {
primenumbers[a] = num; // THE EXCEPTION IS THROWN HERE
a++;
}
else flag = false;
}
}
int素数[]=newint[999];
int num=6,a=3,解=1;
素数[0]=2;
素数[1]=3;
素数[2]=5;
布尔标志=假;
for(num=6;num<=143;num++){//工作到num<=142
for(int i=2;i
正如num时注释中所述,a变量的增量在内部循环中。所以它增长很快。把它放在外面:
int primenumbers[]= new int [999];
int num=6, a=3, solution=1;
primenumbers[0]=2;
primenumbers[1]=3;
primenumbers[2]=5;
boolean flag = false;
for(num=6; num<=143;num++){ // WORKS UNTIL NUM<=142
for(int i=2;i<num/2;i++){
if (num%i == 0){
flag = true;
break;
}
if(!flag) {
System.out.println(a);
primenumbers[a] = num; // THE EXCEPTION IS THROWN HERE
}
else flag=false;
}
a++; //<------- increment it outside the inner loop
}
int素数[]=newint[999];
int num=6,a=3,解=1;
素数[0]=2;
素数[1]=3;
素数[2]=5;
布尔标志=假;
对于(num=6;numintsz=0,primenumbers[]=newint[999];
对于(int i=2;i<143;++i){
布尔标志=真;
对于(int j=2;j*j只需使用arr.length
获得实际数组大小,不要忘记,该数组的项目从0
到arr.length-1
:
public static int[] getPrimes(int total) {
int[] primes = new int[total];
for (int i = 0, val = 0; i < primes.length; val++)
if (isPrime(val))
primes[i++] = val;
return primes;
}
private static boolean isPrime(int val) {
if (val < 2)
return false;
for (int i = 2, sqrt = (int)Math.sqrt(val); i <= sqrt; i++)
if (val % i == 0)
return false;
return true;
}
publicstaticint[]getPrimes(int-total){
int[]素数=新的int[总数];
for(int i=0,val=0;i for(int i=2,sqrt=(int)Math.sqrt(val);我好的,我自己找到了anwser,我在错误的地方结束了第二个for循环工作代码如下
int primenumbers[]= new int [9999];
int num=6, a=3, solution=1;
primenumbers[0]=2;
primenumbers[1]=3;
primenumbers[2]=5;
boolean flag = false;
for(num=6; num<=999;num++){
for(int i=2;i<num/2;++i){
if (num%i == 0){
flag = true;
break;
}
}
if(!flag) {
primenumbers[a] = num;
a++;
}
else flag=false;
}
int素数[]=newint[9999];
int num=6,a=3,解=1;
素数[0]=2;
素数[1]=3;
素数[2]=5;
布尔标志=假;
对于(num=6;num如果在代码中打印a和num,您将在逻辑中找到错误。它将打印
像
总数:6
总数:7
总数:8
数字:9
总数:10
总数:11
a3
a4
数字:12
总数:13
a5
a6
a7
注意:对于num 11,它将a的值增加两倍
我已经做了一些代码更改来解决这个问题
int primenumbers[]= new int [999];
int num=6, a=3, solution=1;
primenumbers[0]=2;
primenumbers[1]=3;
primenumbers[2]=5;
//--------------loop 1 starts here----------
for(num=6; num<=143;num++){ // WORKS UNTIL NUM<=142
//System.out.println("num: "+num);
boolean flag = false;
for(int i=2;i<num/2;i++){
//----------loop 2 starts -----------
if (num%i == 0){
flag = true;
break;
}
}
//----------loop 2 ends -----------
if(!flag) {
primenumbers[a] = num; // THE EXCEPTION IS THROWN HERE
//System.out.println("a"+a);
a++;
}
}
//--------------loop 1 ends here --------------------------
System.out.println(Arrays.toString(primenumbers));
int素数[]=newint[999];
int num=6,a=3,解=1;
素数[0]=2;
素数[1]=3;
素数[2]=5;
//--------------循环1从这里开始----------
对于(num=6;num1)为了更快地获得更好的帮助,请发布a或。2)使用缩进代码行和代码块的逻辑和一致形式。缩进旨在使代码流更易于遵循!一旦num==143
,a
的值为999,就会导致异常
int primenumbers[]= new int [999];
int num=6, a=3, solution=1;
primenumbers[0]=2;
primenumbers[1]=3;
primenumbers[2]=5;
//--------------loop 1 starts here----------
for(num=6; num<=143;num++){ // WORKS UNTIL NUM<=142
//System.out.println("num: "+num);
boolean flag = false;
for(int i=2;i<num/2;i++){
//----------loop 2 starts -----------
if (num%i == 0){
flag = true;
break;
}
}
//----------loop 2 ends -----------
if(!flag) {
primenumbers[a] = num; // THE EXCEPTION IS THROWN HERE
//System.out.println("a"+a);
a++;
}
}
//--------------loop 1 ends here --------------------------
System.out.println(Arrays.toString(primenumbers));