iterator和hasNext()电源实现

时间:2017-03-28 18:32:26

标签: java for-loop iterator iterable

我还在学java,我正在尝试实现一个迭代器接口,它返回整数的幂值(10 ^ 1 = 10,10 ^ 2 = 100等),我的语法有问题

2 个答案:

答案 0 :(得分:2)

首先,hasNext()方法不得更改" currentPow"的值。会员。 正确的实施方式是:

@Override
  public boolean hasNext() {
  return currentPow <= maxPow;  
}

你持续获得相同结果(10)的原因是因为你没有乘以一个类的成员。 你真的不需要&#34;索引&#34;成员所以改为定义:

public class powIterator implements Iterator<Integer>{

  private int currentPow = 1; 
  private int currentResult = 1;       

现在next()应该是这样的:

@Override
public Integer next() throws NoSuchElementException {

  if (index <= maxPow){ 
    index++;
    currentResult *= base;        
    return currentResult; 
  }
  else {   
    throw new NoSuchElementException();        
  }
}

答案 1 :(得分:2)

每次都不会重置迭代器中的变量,只是不会更新它们。所以在下一次运行中他们也是一样的。

如上所述,您可能不应更新currentPow内的hasNext()。顾名思义,这只是检查是否有更多的项目。然后,您应该转到next()内的下一步。

也许尝试这样的事情:

  private int currentPow = 1;

  @Override
  public boolean hasNext() {
     return currentPow <= maxPow;  
  }

  @Override
  public Integer next() throws NoSuchElementException {
     if(currentPow > maxPow)
        throw new NoSuchElementException("Power is above the maximum");

     int pow = (int) Math.pow(base, currentPow);
     currentPow++;
     return pow;
  }