我需要生成一个生成Fibonacci序列的程序 以下是我到目前为止的情况:
import java.util.Scanner;
public class FibonacciRunner
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.println("Enter n:");
int n = in.nextInt();
EP64 fg = new EP64();
for (int i = 1; i <= n; i++)
System.out.println(fg.nextNumber());
}
}
public class EP64
{
public static void nextNumber(int n)
{
int fold1 = 1;
int fold2 = 1;
int fnew = fold1 + fold2;
fold1 = fnew;
}
}
我收到错误:
System.out.println(fg.nextNumber());
话说: 类EP64中的方法nextNumber不能应用于给定的类型: 必需:int 发现:没有争论 原因:实际和正式的参数列表长度不同
并且有人也可以告诉我我是否正在执行此计划吗?如果没有,请帮忙!我看了其他类似的问题,但我对它们没有多大意义
谢谢大家!
答案 0 :(得分:3)
类EP64中的方法nextNumber不能应用于给定类型:required:int found:无参数原因:实际和形式参数列表的长度不同
你的
public static void nextNumber(int n)
^^^^^^^
表示对方法的任何调用都必须提供一个整数作为参数。但是在这里:
System.out.println(fg.nextNumber());
^^ you need to add an integer argument
你没有提出任何争论而违反了这一点。
正如您的代码现在所读,我可能会删除int n
参数。
并且有人也可以告诉我我是否正在执行此计划吗?
Naah,不是真的......
fold1
和fold2
应该是成员变量(因此在每次调用方法时都不会重置它们),fold2
(仅更新fold1
),int
方法返回nextNumber
。阅读
答案 1 :(得分:2)
您正在调用对象引用的静态方法而不是类本身。
并且
根本没有为nextNumber()方法传递任何参数。
使方法非静态:
public void nextNumber(int n) {}
将arg传递给方法:
for (int i = 1; i <= n; i++)
System.out.println(fg.nextNumber(n));
并且不要忘记从您在system.out.println中收集的nextNumber方法返回已处理的数字。
答案 2 :(得分:1)
你的nextNumber
声明说它需要一个int参数,但你是在没有参数的情况下调用它。
此外,您的代码不会按照您的意愿执行。您可能应该创建EP64类的fold1
和fold2
成员,并使该方法成为实例方法而不是静态方法。在更新fold2 = fold1;
之前,您还需要fold1
。
最后,你需要声明nextNumber
返回一个int值,然后实际让它返回一个int值。
答案 3 :(得分:1)
你有两个问题。首先,您的方法不返回任何内容,即它是void
。您需要将其设为int
并在结尾处添加return fnew;
。另一个问题是你每次都是从头开始,每次都会返回2
。您需要将fold1
和fold2
字段移到nextNumber
行之上。哦,并删除int n
参数,因为它没有做任何事情。
答案 4 :(得分:1)
我同意其他帖子的诊断,但不建议成员变量,而是重命名和局部变量。
您可以通过5次致电
来要求第5个Fibonacci-Numberfib.next ();
或只需拨打一次
fib (5);
由于斐波纳契序列增长非常迅速,因此在击中溢出边界之前,您只有很少的调用(54)。因此,如果您反复重新计算相同的序列,打印序列,这不是一个大问题。递归解决方案没问题。
顺便说一句:EP64是一个非常糟糕的名字。答案 5 :(得分:1)
我认为这已经足够了:
import java.util.Scanner;
public class Fibnocci
{
public static void main(String []abc)
{
int a=0,b=1,c;
Scanner in=new Scanner(System.in);
System.out.print("Enter the Range: ");
int n= in.nextInt();
System.out.print(a+" "+b);
for(int i=0;i<n-2;i++) //n-2 because we are showing 0,1 initially.
{
c=a+b;
System.out.print(" "+c);
a=b;
b=c;
}
}
}
如果你想把它作为一种方法,那么:
import java.util.Scanner;
public class Fibnocci
{
public static void main(String []abc)
{
Scanner in=new Scanner(System.in);
System.out.print("Enter the Range: ");
int n= in.nextInt();
callFibonocci(n);
}
public static void callFibonocci(int n)
{
int a=0,b=1,c;
System.out.print(a+" "+b);
for(int i=0;i<n-2;i++) //n-2 because we are showing 0,1 initially.
{
c=a+b;
System.out.print(" "+c);
a=b;
b=c;
}
}
}
您可以在课堂外调用此方法;