0

我一直在尝试编写一个可以显示斐波那契数列的程序。但是,我输入的任何数字都会输出 0。我怀疑它与变量的范围有关,或者我的返回值有问题。有人可以看看我的代码并弄清楚它是否真的是那些问题?我对java有点陌生,所以即使是基本的对我来说也很困难。

 public static void main(String args [])
  {
    Scanner in = new Scanner(System.in);

    int number = 0;

    do{
        System.out.print("Which Fibonacci Number would you like? ");
        fib = in.nextInt();
    }while(number < 0 || number > 71);

    System.out.print("Fibonacci #"+number+" is "+fibcalc(fib)+"\n");
}

public static double fibcalc(double number)
{
    double prevNumber1 = 0;
    double prevNumber2 = 1;
    double fib = 0;

    for(int i =0; i < number; i++){
        fib = prevNumber1;
        prevNumber1 = prevNumber2;
        prevNumber2 = fib + prevNumber2;

}
    return fib;
}

做了一些修改,只差一个错误。

    error: cannot find symbol
    System.out.print("Fibonacci #"+number+" is "+fibcalc(fib)+"\n");
    symbol:   variable fib

我有一个快速的问题。一个方法可以调用另一个变量的方法吗?变量在花括号内。我的代码中的一种。似乎我的大多数错误都与这个相似。

4

1 回答 1

5

这与范围无关。看看这段代码:

while(i < fib){
    fib = prevNumber1;
    ...
}

您将fib变量用作“要执行的迭代次数”和“当前结果”。这是两个独立的概念,应该存储在不同的变量中。

特别是,在第一次迭代中,fib将被设置为0并将i递增到 1...因此您的循环将终止,并返回 0。

我还建议将您的参数类型更改为int并使用longBigInteger用于斐波那契数变量(取决于您想要支持的范围)。这个问题的任何部分都不需要非整数值,所以你根本不应该使用double

最后,我建议使用for循环而不是while循环 - 您想要执行给定数量的迭代,而在 Java 中编写它的惯用方式是:

for (int i = 0; i < count; i++) {
    // whatever
}
于 2012-11-20T13:48:16.123 回答