Я новичок в сетах и нашел эту проблему в книге:
Реализация сито Эратосфена: метод вычисления простых чисел, известный древним грекам. Выберите n. Этот метод вычислит все простые числа до n. Сначала вставьте все числа от 2 до n в набор. Затем сотрите все кратные 2 (кроме 2); то есть 4, 6, 8, 10, 12,… Сотрите все кратные 3; то есть 6, 9, 12, 15,… Подняться на . Затем распечатайте набор.
Я написал этот код:
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class SieveOfEratosthenes {
public static void main (String[] args){
System.out.print(generatePrime(20));
}
public static Set generatePrime(int n){
Set<Integer> primes = new TreeSet<>();
Iterator<Integer> iter = primes.iterator();
//generate all numbers up to n and add them to the set
for (int i = 2; i < n; i++){
primes.add(i);
}
//for numbers up to root n
for (int f = 2; f <= Math.sqrt(n); f++){
while (iter.hasNext()){
int current = iter.next();
if (current % f == 0 && current != 2){
primes.remove(current);
}
}
}
return primes;
}
}
Проблема в том, что код в цикле while не реализуется. Когда я отлаживал программу, я обнаружил, что hasNext () возвращает ноль. Я не мог выяснить причину этого, хотя список содержит цифры.
Это вывод, который я получаю из кода:
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
Process finished with exit code 0
Заранее спасибо!