我正在编写一个打印给定长度的素数集的应用程序。这是一般长度的应用程序,例如所有数字形式为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语句中的部分。它说的是illegalStateException。有人可以帮我弄清楚如何解决这个问题吗?
答案 0 :(得分:1)
您在remove
之间多次调用next
方法。来自docs:
“IllegalStateException - 如果尚未调用下一个方法, 或者在最后一次调用后调用了remove方法 下一个方法“
应该是:
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的倍数。
这是一个标志,你应该使用更好的变量名。