我还在学java,我正在尝试实现一个迭代器接口,它返回整数的幂值(10 ^ 1 = 10,10 ^ 2 = 100等),我的语法有问题
答案 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;
}