这是我到目前为止所得到的
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 :(得分:2)
这里发生的事情相当容易。
k
的大小为10
,最初填充为零。
然后检查前10个自然数并检查它们是否为素数。
因此,对于每个非素数,您应该得到0
可能会将i<n
替换为m<n
,但这取决于您希望实现的目标。
答案 1 :(得分:1)
您只是计算到i == n
(所以只查看n
之前的数字) - 您需要继续i
递增到m == n
,这样您才能考虑数字是否正确&GT; n
是素数。
如果您使用更好的变量名称,例如nextPrimeIndex
或primesFound
而不是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;
}