范围,方法返回

时间:2012-11-20 13:46:28

标签: java scope

我一直在尝试编写一个可以显示斐波那契序列的程序。但是我输入的任何数字都会输出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

我得到了一个问题。 一个方法可以调用另一个变量的方法吗?变量在花括号内。我的代码中有什么。看起来我的大多数错误与此类似。

1 个答案:

答案 0 :(得分:5)

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

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

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

特别是,在第一次迭代中,fib将设置为0i将增加为1 ...因此您的循环将终止,返回0. < / p>

我还建议您将参数类型更改为int,并使用longBigInteger作为Fibonacci数字变量(取决于您要支持的范围)。此问题的任何部分都不需要非整数值,因此您根本不应该使用double

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

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