Насколько я понял вопрос, основная проблема заключается в инициализации возрастающего значения, которое сбрасывается до 2 при каждом вызове next()
.
Чтобы решить такую проблему, вы можете получить доступ кПоследняя запись в списке, просто позвонив primes.get(primes.size() - 1)
.Конечно, это может привести к IndexOutOfBoundsException
, если оно пустое, поэтому вы должны сделать небольшую проверку перед тем, как:
Integer num = primes.isEmpty() ? Integer.valueOf( 1 ) : primes.get( primes.size() - 1 );
num++;
Также обратите внимание, что возвращаемое число должно быть последним простым числом, поэтому мы должны увеличитьэто один раз, прежде чем следовать остальной части рутины.В противном случае было бы возвращено то же значение, и вы бы ничего не получили.
Фактически мы могли бы легко решить проблему приращения один раз, преобразовав цикл while в цикл do-while:
public Integer next()
{
int num = primes.isEmpty() ? 1 : primes.get( primes.size() - 1 ).intValue();
do
{
num++;
}
while ( !isPrime( num ) );
Integer primer = Integer.valueOf( num );
primes.add( primer);
return primer;
}