-1

我有两个类,Progression 和 FibonacciProgression,但是当在 4 和 6 上调用 print 方法时,FibonacciProgression 会打印出一些意想不到的结果,如下所示。谁能解释这是为什么?

public class Progression {

    protected long first;
    protected long cur;

    Progression() {
        cur = first = 0;
    }

    protected long firstValue() {
        cur = first;
        return cur;
    }

    protected long nextValue() {
        return ++cur;
    }

    public void printProgression(int n) {
        System.out.print(firstValue());
        for (int i = 2; i <= n; i++) {
            System.out.print(" " + nextValue());
        }
        System.out.println();
    }

    public static void main (String[] args) {
        Progression prog = new Progression();
        System.out.println("Default Progression: ");
        prog.printProgression(10);
    }

}

和..

public class FibonacciProgression extends Progression {

    protected long prev;

    FibonacciProgression(long value1, long value2) {
        first = value1;
        prev = value2 - value1;
    }

    FibonacciProgression() {
        this(0,1);
    }

    protected long nextValue() {
        long temp = prev;
        prev = cur;
        cur += temp;
        return cur;
    }

    public static void main (String[] args) {
        Progression fibProg = new FibonacciProgression(2,5);
        System.out.println("Default Progression: ");
        fibProg.printProgression(4);
        fibProg.printProgression(6);
    }

}
4

2 回答 2

2

当您printProgression第二次使用参数 6 调用时, 的值prev不会重置为其初始值。prev仍然包含上次调用的值 7。调用of时需要保存value2FibonacciProgression重置。像这样:prevfirstValueFibonacciProgression

protected long firstValue() {
    prev = val2 - first;  // val2 is value2 passed in constructor
    return super.firstValue();
}
于 2012-05-06T13:34:28.980 回答
1

您的 printProgression “破坏”了 prev 的值。要轻松看到它,请将 main 切换到:

public static void main(String[] args) {
    Progression fibProg = new FibonacciProgression(2, 5);
    System.out.println("Default Progression: ");
    fibProg.printProgression(4);
    fibProg = new FibonacciProgression(2, 5);
    fibProg.printProgression(6);
}
于 2012-05-06T13:38:36.637 回答