该程序应该从用户那里得到斐波纳契数,并且程序将计算它是什么,同时确保用户输入正数和不小于斐波那契数70的数字。因此,如果用户输入7,它应该打印13. fibcalc()方法应该进行计算。
当我尝试编译程序时,我得到了错误"方法Fibalacci中的fibcalc方法无法应用于给定的类型:System.out.printf("Fibonacci #%d is %f", num, fibcalc(num, x3));
和"找不到符号" return x3;
这是我的代码:
import java.util.Scanner;
public class Fibonacci
{
public static void main ( String args[] )
{
Scanner input = new Scanner ( System.in );
int num;
double x3 = 0;
System.out.print("Which Fibonacci number would you like? ");
num = input.nextInt();
do
{
System.out.print("Which Fibonacci number would you like? ");
num = input.nextInt();
}while(num >= 0 && num <= 70);
System.out.printf("Fibonacci #%d is %f", num, fibcalc(num, x3));
}
public static double fibcalc(int num)
{
int x1 = 0;
int x2 = 1;
if (num == 0)
return 0;
else if (num == 1)
return 1;
else
for (int x3 = 0; x3 < num; x3++)
{
x3 = x1 + x2;
x1 = x2;
x2 = x3;
}
return x3;
}
}
我可能错过了其他一些问题。我对java很陌生。提前谢谢。
答案 0 :(得分:2)
fibcalc()
方法只有一个int
参数,但您使用两个参数调用它。
从
更改来电fibcalc(num, x3)
到
fibcalc(num)
即将该行更改为:
System.out.printf("Fibonacci #%d is %f", num, fibcalc(num));
此外,如果您希望获得准确的结果数字,请使用double
更改为使用BigInteger
,这样可以准确处理任意大数字。
答案 1 :(得分:0)
如果你想计算斐波纳契数,你可以使用直接(非递归,非迭代)formula for Fibonacci numbers:
Fib(n) = (pow((1+sqrt(5))/2, n) + pow((1-sqrt(5))/2, n)) / sqrt(5)
事实证明,对于所有n >= 0
,您可以将此公式简化为:
Fib(n) = round(pow((1+sqrt(5))/2, n) / sqrt(5))
了解这一点,您可以使用以下fibcalc
的简单实现:
public static double fibcalc(int num) {
return Math.floor(Math.pow((1+Math.sqrt(5))/2, num) / Math.sqrt(5) + 0.5);
}
答案 2 :(得分:0)
您还可以使用以下计算器计算斐波纳契数列(使用Javascript):enter link description here