Java实现素数迭代器

定义一个名为PrimeIterator的迭代器类,用于遍历素数。构造方法带参数,用于指定素数的上限,比如,new PrimeIterator(20000)创建一个迭代器,可以用于遍历小于等于20000的素数。编写一个测试程序,使用该迭代器显示所有小于或者等于8000的素数。

import java.util.Iterator;

public class PrimeIterator implements Iterator {
	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 iter = new PrimeIterator<>(8000);
		iter.forEachRemaining(i -> System.out.println(i + " "));
	}

}

你可能感兴趣的:(Java,java,开发语言,jvm)