定义一个名为PrimeIterator的迭代器类,用于遍历素数。构造方法带参数,用于指定素数的上限,比如,new PrimeIterator(20000)创建一个迭代器,可以用于遍历小于等于20000的素数。编写一个测试程序,使用该迭代器显示所有小于或者等于8000的素数。
import java.util.Iterator;
public class PrimeIterator<E> implements Iterator<E> {
private static final int INITIAL_CAPACITY = 16;
private Integer[] datas = new Integer[INITIAL_CAPACITY];
private int size = 0;
private int count = 0;
private int index = 0;
public PrimeIterator() {
this(0);
}
public PrimeIterator(int num) {
for (int i = 2; i <= num; i++) {
if (prime(i)) {
count++;
if (size >= datas.length) {
Integer[] newDatas = new Integer[size * 2 + 1];
System.arraycopy(datas, 0, newDatas, 0, size);
datas = newDatas;
}
datas[size++] = i;
}
}
}
public boolean prime(int num) {
if (num < 2)
return false;
else if (num == 2)
return true;
else {
int limit = (int) Math.sqrt(num) + 1;
for (int i = 2; i <= limit; i++) {
if (num % i == 0)
return false;
}
}
return true;
}
@Override
public boolean hasNext() {
// TODO Auto-generated method stub
return index < count;
}
@Override
public E next() {
// TODO Auto-generated method stub
return (E) datas[index++];
}
public static void main(String[] args) {
PrimeIterator<Integer> iter = new PrimeIterator<>(8000);
iter.forEachRemaining(i -> System.out.println(i + " "));
}
}