1

这是我的代码。输出是单行中的 7 7 7 7,而不是两行中的 2 3 5 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

它打印在一行中,因为您{}在 for 语句之后丢失了。利用:

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

所有值都是 7,因为您不应该使用 3 个循环。当您遍历数字 0 到 10 时,您会遍历所有单元格并在它是素数时更新它。结果是所有值都是 7,因为它是 0 到 10 之间的最后一个素数。

你应该重新思考你的逻辑。一种解决方案是遍历所有数字并检查一个是否为素数,将其放入下一个空单元格(一维数组应该足够了)。

于 2013-09-03T08:47:40.810 回答
0

您的 2 个内部循环遍历每个数字的整个数组,即它用最新的素数覆盖整个数组。

修复 -

  • 一维数组就足够了。
  • 不需要超过 1 个循环,保持一个索引计数器,从 0 开始,每次找到一个素数时,做arr[index++] = prime
  • 或者只是使用一个列表并在最后插入。
于 2013-09-03T08:48:38.720 回答