我的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;
}
}
}
答案 0 :(得分:0)
当您尝试填写justPrimes
时,您的第二部分是错误的:
for(int index = 0; index < primes; index++)
{
if(numberArray[c] == 0)
{
justPrimes[index] = c;
}
}
这将只使用一个值justPrimes
填充整个数组c
,因此justPrimes
将仅包含最后一个素数&lt; = N。
填写break
后,您需要justPrimes
,而第二个if
条件还不够。
修复:
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;
}
}
答案 1 :(得分:0)
这个额外的循环打破了你的逻辑(尝试将每个素数写入多个插槽):
for(int index = 0; index < primes; index++)
好像你真的想要:
int index = 0; // instead of looping on index, initialize it to zero here
for (int c = 2; c < numberArray.length; c++) {
if (numberArray[c] == 0) {
justPrimes[index] = c;
index++; // then increment index here so next prime goes in next slot
}
}