我的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/

10-12 03:58