Java sieves定理素数数组/方法

时间:2015-01-25 15:50:37

标签: java arrays methods

我试图仅将素数从我的函数返回到我的main但是java一直告诉我创建局部变量fi​​ndPrimes即使我做了,我似乎无法发现问题:

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;
    }

1 个答案:

答案 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[]