0

目标- 找到所有的 primeNumbers 并用它创建数组 做了什么- 创建了方法 primeReturner - 如果 number prime 则返回 true -

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

created 用素数创建数字的方法

    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 中的一些项目和一些正常......有时它返回错误......

提问- 我的方法 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 {私有静态int选择;

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 的数组, 在此处输入图像描述 但是在打印此数组期间我得到java.lang.ArrayIndexOutOfBoundsException 错误...

如何解决此错误?

4

4 回答 4

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]);
    }
}

认为 'i<524' 不是最好的变体,稍后会尝试找到更好的东西 =) 谢谢大家。

于 2013-02-06T19:43:12.717 回答
0

i++在你的if(primeReturner(i)) == true)街区做。这是对for循环的补充i++。您很可能会得到一个,ArrayIndexOutOfBoundsException因为您的i索引将达到大于 100 的值,这是您的数组最大大小。i++if块中删除它。

于 2013-02-06T19:13:47.273 回答
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

于 2013-02-06T19:17:30.330 回答
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;
    }
}
于 2013-02-06T19:18:49.690 回答