我一直在尝试编写一个可以显示斐波那契序列的程序。但是我输入的任何数字都会输出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
我得到了一个问题。 一个方法可以调用另一个变量的方法吗?变量在花括号内。我的代码中有什么。看起来我的大多数错误与此类似。
答案 0 :(得分:5)
这与范围无关。看看这段代码:
while(i < fib){
fib = prevNumber1;
...
}
您使用fib
变量作为“要执行的迭代次数”和“当前结果”。这是两个独立的概念,应存储在单独的变量中。
特别是,在第一次迭代中,fib
将设置为0
,i
将增加为1 ...因此您的循环将终止,返回0. < / p>
我还建议您将参数类型更改为int
,并使用long
或BigInteger
作为Fibonacci数字变量(取决于您要支持的范围)。此问题的任何部分都不需要非整数值,因此您根本不应该使用double
。
最后,我建议使用for
循环而不是while
循环 - 您希望执行给定数量的迭代,而在Java中编写的惯用方法是:
for (int i = 0; i < count; i++) {
// whatever
}