2016-02-17 45 views
0

这里方法接受一个int“N”作为输入,并返回一个包含前n个质数的数组是我走到这一步,JAVA:

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 

怎么样了,即使是可能的吗?我究竟做错了什么?

+0

“怎么样了,即使可能”真的返回 - >'INT [] K =新的INT [n];'你有什么感想发生在这里? – Pshemo

+0

数组k以我的数字n的大小创建,为什么?我没有看到它有什么不对 – RSTAnce

+0

我不是说这是错的,我试图解释“为什么”的一部分。那么你认为你的数组在创建后包含了什么? – Pshemo

回答

2

这里发生的事情很简单。 k的大小为10,最初填充零。

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

也许通过m<n更换i<n但是这取决于你想要达到的目标位。

+0

没关系,我知道了,如果我见过一个,就很愚蠢。非常感谢你! – RSTAnce

+0

我需要制作一个更好的解释动画。我的建议是安装eclipse,然后使用交互式调试模式。或者你可以在for循环中看到每次迭代的输出 – CAFEBABE

+0

基本上'i'计算你检查了多少个数字是否为素数。但是,只有检查号码的主要子集进入阵列。 – CAFEBABE

1

你只是计数,直到i == n(因此只盯着数量最多n) - 你需要不断递增i直到m == n所以你正在考虑数>n是否是素数。

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

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