为数组列表实现迭代器

时间:2019-01-02 12:52:52

标签: java iterator

我有一个实例DynamicArray的列表,它几乎是一个数组列表, 在这里,我正在尝试实现一个迭代器:

问题是我不允许添加任何字段,所以没有索引字段...,我正在尝试为迭代器编写方法next(),以返回下一个质数,我想也许最好将它也添加到数组中。

但是每次我下次调用它时,都会将num设置为2,然后它不会递增,因此最终只会返回2。

import java.util.Iterator;

public class PrimeIterator implements Iterator<Integer> {

private List<Integer> primes;


//Complete the following method
public PrimeIterator(){

    this.primes = new DynamicArray<Integer>();



}

//Complete the following method
public boolean hasNext(){

    return false;
}

//Complete the following method
public Integer next(){

  Integer num = new Integer(2);

  while(!isPrime(num)){
      num++;
  }
  primes.add(num);
   return num;

}

public boolean isPrime (Integer num){

    for(int i = 2; i*i<=num; i++){

        if(num%i == 0) return false;
    }

    return true;
}

//DO NOT REMOVE OR CHANGE THIS MEHTOD – IT IS REQUIRED 
public void remove() {
    return;
}


}

有什么办法可以解决这个问题?或关于如何使用我要做的那个领域的任何想法?

1 个答案:

答案 0 :(得分:0)

据我了解的问题,主要问题在于递增值的初始化,该值在每次lapply(pwfst, round)的调用中都会重置为2。

要解决此类问题,您可以通过简单地调用next()来访问列表的最后一个条目。当然,这可能会导致primes.get(primes.size() - 1)为空,因此您必须先做一点检查,例如:

IndexOutOfBoundsException

还要注意,返回的数字应该是最后一个质数,因此在执行该例程的其余部分之前,我们必须将其递增一次。否则,将返回相同的值,您将一无所获。

实际上,通过将while循环转换为do-while循环,我们可以轻松解决一次增量问题:

Integer num = primes.isEmpty() ? Integer.valueOf( 1 ) : primes.get( primes.size() - 1 );
num++;