java.lang.ArrayIndexOutOfBoundsException同时查找素数并使用它创建数组

时间:2013-02-06 19:10:48

标签: java arrays exception loops indexoutofboundsexception

目标 - 找到所有primeNumbers并使用它创建数组 做了什么 - created method primeReturner - 如果数字为prime,则返回true -

    private static boolean primeReturner (int i){
    for (int j=2;j<i; j++){
        if (i%j==0)
            return false;
    }
    return true;
}

创建了使用素数创建数字的方法

    private static void simpleArray()  {
    int []a = new int [100];
    a[0]=1;
    a[1]=2;
    for (int i=2; i<a.length; i++){
        if (primeReturner(i)==true){
            a[i]=i;
            i++;
            }
    }
}

问题 - 在创建数组期间我遇到了一些错误 - 数组0中的某些项目有些错误...有时它会返回错误...

Questing - 我的方法simpleArray有什么问题?


稍微修改一下代码 - 现在它识别所有素数并用它创建数组,但是在将第100个项添加到数组后我得到错误

代码

private static void simpleArray()  {
    int []a = new int [100];
    a[0]=1;
    a[1]=2;
    int count=2;
    while (count<100)
    for (int i=3; ; ++i){
        if (primeReturner(i)==true){
            a[count]=i;
            count++;
            }
    }
    for (int j=0; j<a.length; j++){
        System.out.print(" " + a[j]);
    }
}
private static boolean primeReturner (int i){
    for (int j=2;j<i; j++){
        if (i%j==0)
            return false;
    }
    return true;
}

和主要功能     公共课Exercise_1 {         private static int select;

public static void main (String[]args) throws IOException{
    System.out.println("Menu:");
    ....
    System.out.println("Array with simple numbers - enter 7");
    select = getNumber ();

    switch (select){
    .....
    case 7:{
        simpleArray();
    }
    }
}

结果创建了素数为succsesfull的所有数组 enter image description here  但在打印此数组期间,我得到 java.lang.ArrayIndexOutOfBoundsException错误 ...

如何解决此错误?

4 个答案:

答案 0 :(得分:0)

您在i++区块中if(primeReturner(i)) == true)。这是for循环i++的补充。您最有可能获得ArrayIndexOutOfBoundsException,因为您的i索引将达到大于100的值,这是您的阵列最大大小。删除i++块中的if

答案 1 :(得分:0)

错误是由于您在数组中使用相同的变量(即第n个素数的索引)以及素数的值这一事实引起的。因此,如果索引是非素数,则simpleArray中构造的数组将具有零值,如果它是素数,则值i将具有零值。如果需要完全打包的数组,则需要第二个索引:

private static void simpleArray()  {
    int []a = new int [100];
    a[0] = 2; // by definition 1 is not prime
    int i = 1;
    int possible_prime = 3;
    while (i < a.length) {
        if (primeReturner(possible_prime)) {
            a[i++]=possible_prime;
        }
        possible_prime++;
    }
}

关于一个素性的讨论,请参阅Wikipedia

答案 2 :(得分:0)

 for (int i=2; i<a.length; i++){
        if (primeReturner(i)==true){
            a[i]=i;
            i++;
            }
    }

这就是问题所在......从代码中删除i ++

所以这里:

for (int i=2; i<a.length; i++){
    if (primeReturner(i)==true){
        a[i]=i;
    }
}

答案 3 :(得分:0)

查找错误 - 需要通过添加限制来停止循环 所以,最终的代码是

private static void simpleArray()  {
    int []a = new int [100];
    a[0]=1;
    a[1]=2;
    int count=2;
    while (count<100){
    for (int i=3;**i<524** ; ++i){
        if (primeReturner(i)==true){
            a[count]=i;
            count++;
            }
        }
    }
    for (count=0; count<a.length; count++){
        System.out.print(" " + a[count]);
    }
}

认为'我&lt; 524'不是最好的变种,后来会试着找到更好的东西=) 感谢所有人。