我的justPrimes数组似乎不起作用,我不明白为什么,当我在控制台上打印出来看看里面是什么时,我只是得到了一堆随机字符,一遍又一遍地重复有人能发现这个问题吗?
int[] numberArray = new int[N];
int primes = 0;
for(int i = 2; i < numberArray.length; i++)
{
if(numberArray[i] == 0)
{
primes++;
int multiple = 2*i;
while(multiple < N)
{
numberArray[multiple] = 1;
multiple = multiple + i;
}
}
}
int[] justPrimes = new int[primes];
for(int c = 2; c < numberArray.length; c++)
{
for(int index = 0; index < primes; index++)
{
if(numberArray[c] == 0)
{
justPrimes[index] = c;
}
}
}
最佳答案
当您试图填写justPrimes
时,您的第二部分是错误的:
for(int index = 0; index < primes; index++)
{
if(numberArray[c] == 0)
{
justPrimes[index] = c;
}
}
这将用一个值填充整个数组
justPrimes
,因此c
将只包含最后一个素数填写justPrimes
后需要break
,第二个justPrimes
条件不够。要修复:
for(int c = 2; c < numberArray.length; c++)
{
for(int index = 0; index < primes; index++)
{
if(numberArray[c] == 0 && justPrimes[index] == 0)//Need to find the correct index, which has not been filled in yet.
{
justPrimes[index] = c;
break; //You forgot this
}
}
}
更好的解决方案:
for(int c = 2; c < numberArray.length; c++)
{
if(numberArray[c] == 0)
{
for(int index = 0; index < primes; index++)
{
if(justPrimes[index] == 0)
{
justPrimes[index] = c;
break; //You forgot this
}
}
}
}
更好的是:
int index = 0;
for(int c = 2; c < numberArray.length; c++)
{
if(numberArray[c] == 0)
{
justPrimes[index++] = c;
}
}
关于java - 筛定理数组中没有数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28221163/