我试图仅将素数从我的函数返回到我的main但是java一直告诉我创建局部变量findPrimes即使我做了,我似乎无法发现问题:
public static int[] primesOnly(int[] array, int N)
{
int primes = 0;
int i = 2;
while(i < array.length)
{
if(array[i] == 0)
{
int multiple = 2*i;
while(multiple < N)
{
array[multiple] = 1;
multiple = multiple + i;
}
}
if(array[i] == 0)
{
System.out.print(i + " ");
primes++;
}
i++;
}
while(i < array.length)
{
int[] justPrimes = new int[primes];
for(int index = 0; index < primes; index++)
{
if(array[i] == 0)
justPrimes[index] = i;
}
i++;
}
return justPrimes;
}
答案 0 :(得分:0)
justPrimes
是在while
循环范围内定义的。这意味着你不能在循环之外引用它。只需在循环外移动声明:
int[] justPrimes = new int[primes];
while(i < array.length)
{
for(int index = 0; index < primes; index++)
{
if(array[i] == 0)
justPrimes[index] = i;
}
i++;
}
return justPrimes;
作为第二个注释,循环数据两次似乎并不高效。在第一次通过时累积您的素数似乎更有意义,然后在完成时复制到适当大小的int[]
。