0

我正在编写一个打印具有给定长度的素数集的应用程序。这是一个通用长度的应用程序,例如从 1 到 100 的所有数字

import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;


public class Sieve
{
    private int number;

    public Sieve (int maxPrime)
    {
        number = maxPrime;
    }

    public Set<Integer> getPrimes()
    {
        Set<Integer> setNumbers = new TreeSet<Integer>();


        for(int i=2; i<=number; i++)
        {
            setNumbers.add(i);
        }

        Iterator<Integer> iter = setNumbers.iterator();

        while(iter.hasNext())
        {
            int number1 = iter.next();

            for( int i = 2; i <= Math.sqrt(number); i++ )
            {
                if( number1 % i == 0)
                {
                    iter.remove();
                }
            }

        } 
        return setNumbers;
    }
}

给我错误的部分是 if 语句中的部分。它说非法状态异常。有人可以帮我弄清楚如何解决这个问题吗?

4

1 回答 1

1

您在remove之间多次调用该方法next。从文档

“IllegalStateException - 如果尚未调用下一个方法,或者在最后一次调用下一个方法之后已经调用了删除方法”

它应该是:

bool isComposite = false;

for( int i = 2; i <= Math.sqrt(number1); i++ )
{
    if( number1 % i == 0)
    {
        isComposite = true;
        break;
    }
}

if(isComposite)
{
    iter.remove();
}

算法错误是您要达到number(要考虑的最大可能素数)的平方根,而不是number1您正在考虑的当前素数的根。这意味着您将排除 2,因为它小于 sqrt(100) 并且是 2 的倍数。

这表明您应该使用更好的变量名。

于 2012-04-05T03:26:42.690 回答