首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设计模式:迭代器模式

设计模式:迭代器模式
EN

Stack Overflow用户
提问于 2020-05-15 12:15:45
回答 2查看 129关注 0票数 0
代码语言:javascript
复制
    public BigDecimal next() {

        for (int i = 1; i < 100; i++) {
            BigDecimal cur = new BigDecimal(1);
            BigDecimal prev = new BigDecimal(0);

            final BigDecimal next = cur.add(prev);
            prev = cur;
            cur = next;
        }

        return cur;
    }

无法在此for循环中实现Bigdecimal以获取斐波那契数字

EN

回答 2

Stack Overflow用户

发布于 2020-05-15 12:50:22

在您的代码中,hasNext始终为false。这将告诉迭代器的使用者,我们已经到达迭代的末尾。

票数 2
EN

Stack Overflow用户

发布于 2020-05-15 16:19:07

这就是你想要实现的,

我用整数替换了所有的BigDecimal引用。如果你想保持原样,那么需要做一些小的改变。

代码语言:javascript
复制
//This is class with main method
import java.util.Iterator;

public class IteratorPattern {
public static void main(String[] args) {
    int n = 10;
    FibonacciSequence fibonacciSequence = new FibonacciSequence(n);

    System.out.println("iteration using iterator for-loop");

    //iteration using iterator for-loop
    for (Integer fibonacciNumber : fibonacciSequence) {
        System.out.println(fibonacciNumber);
    }

    System.out.println("iteration using iterator");

    //iteration using iterator
    Iterator<Integer> iterator = fibonacciSequence.iterator();
    while (iterator.hasNext()) {
        System.out.println(iterator.next());
    }
}
}

class FibonacciSequence implements Iterable<Integer>, Iterator<Integer> {

private final Integer n;
private Integer a;
private Integer b;
private int c = 1;

FibonacciSequence(Integer n) {
    this.n = n;
}

@Override
public Iterator<Integer> iterator() {
    return new FibonacciSequence(n);
}

@Override
public boolean hasNext() {
    return c <= n;
}

@Override
public Integer next() {
    c++;
    if (a == null && b == null) {
        a = 0;
        return 0;
    } else if (b == null) {
        b = 1;
        return b;
    } else if (a == 0 && b == 1) {
        a = 1;
        return b;
    }
    Integer temp = b;
    b = b + a;
    a = temp;
    return b;
}
}

输出:

代码语言:javascript
复制
 iteration using iterator for-loop
0
1
1
2
3
5
8
13
21
34
iteration using iterator
0
1
1
2
3
5
8
13
21
34

现在的重点是我做了什么改变。

如果计数达到n。,您的hasNext方法应该返回false。

  1. 我在下一个方法中更改了逻辑。看看这个。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61811668

复制
相关文章

相似问题

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