-1

ProgressionとFibonacciProgressionの2つのクラスがありますが、FibonacciProgressionは、以下のように4と6でprintメソッドが呼び出されたときに予期しない結果を出力します。なぜこれなのか誰かが説明できますか?

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を使用して2回目の呼び出しを行う場合、の値は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は、前の値を「破棄」します。それが行われていることを簡単に確認するには、メインを次のように切り替えます。

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 に答える