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;num
intsz=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;ifor(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));