首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >迭代器和hasNext() power实现

迭代器和hasNext() power实现
EN

Stack Overflow用户
提问于 2017-03-28 18:32:26
回答 2查看 679关注 0票数 1

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-28 18:59:42

首先,hasNext()方法不能更改"currentPow“成员的值。正确的执行办法是:

代码语言:javascript
复制
@Override
  public boolean hasNext() {
  return currentPow <= maxPow;  
}

您一直获得相同结果(10)的原因是,您没有将类中的一个成员相乘。您不需要真正的“索引”成员,所以应该定义:

代码语言:javascript
复制
public class powIterator implements Iterator<Integer>{

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

现在,next()应该如下所示:

代码语言:javascript
复制
@Override
public Integer next() throws NoSuchElementException {

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

Stack Overflow用户

发布于 2017-03-28 19:12:24

Iterator中的变量不是每次都会被重置,您根本就不会更新它们。所以在下一轮比赛中,他们是一样的。

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

也许可以试试这样的方法:

代码语言:javascript
复制
  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;
  }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43077308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档