2012-11-20 201 views
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 

我得到了一个qucik问题。 可以一个方法调用另一个方法的变量?该变量在花括号内。类似于我的代码中。似乎我的大多数错误都与此类似。

回答

5

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

​​

您使用的是fib变量既是“迭代次数,以执行”和“当前结果”。这些是两个单独的概念,应该存储在单独的变量中。

特别是,在第一次循环,fib将被设置为0i将递增到1 ...所以你的循环将终止运行,返回0。

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

最后,我建议使用for循环,而不是一个while循环 - 你要执行一个给定的迭代次数,和写作,在Java中的惯用方法是:

for (int i = 0; i < count; i++) { 
    // whatever 
} 
+0

感谢指针,我改变了循环结构改变了原来的光纤数量。 – user1714873