【发布时间】:2023-04-02 21:32:01
【问题描述】:
我正在尝试使用埃拉托色尼筛算法生成 n 个素数。我对其进行了调试,发现它在某些时候开始删除已删除的数字。我不知道是什么问题,但我敢打赌这与我的循环有关。你能帮忙吗?
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class Part6 {
public static List<Integer> primeSequence(int n) {
List<Integer> list = IntStream.range(2, n).boxed().collect(Collectors.toList());
for (int i = 2; i <= list.size(); i++) {
for (int j = i + 1; j <= list.size(); j++) {
if(j % i == 0)
list.remove(j);
}
}
return list;
}
public static void main(String[] args) {
System.out.println(primeSequence(Integer.parseInt(args[0])));
}
}
【问题讨论】:
-
您不想在迭代时从
List中删除元素。最好使用您要删除的元素构建一个单独的List,然后使用removeAll()方法。
标签: java loops nested-loops primes sieve-of-eratosthenes