0

ターゲット-すべての primeNumbers を見つけて、それを使用して配列を作成します

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

および main 関数 public class 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();
    }
    }
}

その結果、素数が成功したすべての配列が作成されまし ここに画像の説明を入力 たが、この配列の印刷中にjava.lang.ArrayIndexOutOfBoundsException エラーが発生しました...

このエラーを解決するにはどうすればよいですか?

4

4 に答える 4

0

あなたはi++あなたのif(primeReturner(i)) == true)ブロックで行います。これはforloopに追加されますi++。インデックスが配列の最大サイズである 100 を超える値に達するArrayIndexOutOfBoundsExceptionため、おそらく が得られます。ブロックでそれをi削除します。i++if

于 2013-02-06T19:13:47.273 に答える
0

エラーを見つける - 制限を追加して i でループを停止する必要があるため、最終的なコードは次のとおりです。

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

エラーは、同じ変数を使用して配列のインデックス (つまり、n 番目の素数のインデックス) と素数の値を使用しているために発生します。したがって、インデックスが素数でない場合は で構築された配列simpleArrayの値はゼロになり、素数の場合は値になりますi。完全にパックされた配列が必要な場合は、2 番目のインデックスが必要です。

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++;
    }
}

1 の素数性の議論については、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 に答える