Java筛定理素数数组/方法
我试图只将素数从函数返回到main,但java一直告诉我创建局部变量findTime,尽管我这样做了,但我似乎无法发现问题:Java筛定理素数数组/方法,java,arrays,methods,Java,Arrays,Methods,我试图只将素数从函数返回到main,但java一直告诉我创建局部变量findTime,尽管我这样做了,但我似乎无法发现问题: public static int[] primesOnly(int[] array, int N) { int primes = 0; int i = 2; while(i < array.length) { if(array[i] == 0)
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;
}
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[]似乎更有意义。将justPrimes的声明移出第二个while循环。