JAVA:采用int" n"作为输入,并返回包含前n个素数的数组

时间:2016-02-17 22:15:51

标签: java arrays

这是我到目前为止所得到的

public static int[] firstPrimeNumbers(int n) { 

    int[] k = new int[n];
    int m = 0;
    for (int i = 0; i < n; i++) { 

        if (isPrime(i)) { 
            k[m] = i;
            m++;
        }

    }
    return k;
}

问题是,当我尝试打印结果数组时,我最后得到了一堆0。例如,当我拿n = 10时,程序打印

2, 3, 5, 7, 0, 0, 0, 0, 0, 0

怎么可能呢?我做错了什么?

3 个答案:

答案 0 :(得分:2)

这里发生的事情相当容易。 k的大小为10,最初填充为零。

然后检查前10个自然数并检查它们是否为素数。 因此,对于每个非素数,您应该得到0

可能会将i<n替换为m<n,但这取决于您希望实现的目标。

答案 1 :(得分:1)

您只是计算到i == n(所以只查看n之前的数字) - 您需要继续i递增到m == n,这样您才能考虑数字是否正确&GT; n是素数。

如果您使用更好的变量名称,例如nextPrimeIndexprimesFound而不是m,则可能更容易发现。

答案 2 :(得分:1)

你应该修改你的for循环。你正在做的是实际返回n元素数组,原始数字小于n

 public static int[] firstPrimeNumbers(int n) { 

      int[] k = new int[n];
      int nr = 2;
      int m = 0; 
      while(m<n){
         if(isPrime(nr)){ 
           k[m] = nr;
           m++;      
        }
         nr++;
      } 
     return k;
   }