1

これが私のコードです。出力は、2 行の 2 3 5 7 ではなく、1 行の 7 7 7 7 です。間違いのご指摘よろしくお願いします。

int [][] array = new int [2][2];
int N =10;
    for (int num = 2; num <= N; num++) {
            for (int i = 0; i < array.length; i++){ 
                for (int j = 0; j < array.length; j++){ 
                    if(isprime(num)){
                        array[i][j] = num;
                }
            }
        }
    }
    for (int i = 0; i < 2; i++)
        for (int j = 0; j < 2; j++){
            System.out.print(array[i][j] + " ");
        }
        System.out.println();
}
private static boolean isprime(int number) {
    for (int i = 2; i < number; i++) {
        if(number % i == 0) {
            return false;
        }
}
return true;        
4

3 に答える 3

0

これを試して.....

    int [][] array = new int [2][2];
    int N =10;
    for(int num = 2,i=0,j=0; num <= N; num++){
        if(isprime(num)){
            if(j >= array.length){
                j = 0;
                i++;
            }
            array[i][j++] = num;
        }
    }
    for (int i = 0; i < 2; i++){
        for (int j = 0; j < 2; j++){
            System.out.print(array[i][j] + " ");
        }
        System.out.println();
    }
于 2013-09-03T09:29:58.860 に答える
0

2 つの内部ループは、各番号の配列全体を実行します。つまり、配列全体を最新の素数で上書きします。

修正 -

  • 1次元配列で十分です。
  • 複数のループは必要ありません。0 から始まるインデックス カウンターを保持し、素数を見つけるたびに実行します。arr[index++] = prime
  • または、リストを使用して最後に挿入します。
于 2013-09-03T08:48:38.720 に答える
0

{}for ステートメントの後に抜けているため、1 行で出力されます。使用する:

for (int i = 0; i < 2; i++) {
    for (int j = 0; j < 2; j++){
        System.out.print(array[i][j] + " ");
    }
    System.out.println();
}

すべきではないときに 3 つのループを使用するため、すべての値は 7 です。0 から 10 までの数値をループすると、すべてのセルを反復処理し、素数の場合は更新します。結果は、0 から 10 までの最後の素数であるため、すべての値が 7 になります。

ロジックを再考する必要があります。1 つの解決策は、すべての数値をループして、そのうちの 1 つが素数かどうかを確認し、それを次の空のセルに入れることです (1D 配列で十分です)。

于 2013-09-03T08:47:40.810 に答える