Fibonacci序列返回参数

时间:2011-11-14 07:13:13

标签: java

我需要生成一个生成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 发现:没有争论 原因:实际和正式的参数列表长度不同

并且有人也可以告诉我我是否正在执行此计划吗?如果没有,请帮忙!我看了其他类似的问题,但我对它们没有多大意义

谢谢大家!

6 个答案:

答案 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,不是真的......

  • fold1fold2应该是成员变量(因此在每次调用方法时都不会重置它们),
  • 您忘记更新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类的fold1fold2成员,并使该方法成为实例方法而不是静态方法。在更新fold2 = fold1;之前,您还需要fold1

最后,你需要声明nextNumber返回一个int值,然后实际让它返回一个int值。

答案 3 :(得分:1)

你有两个问题。首先,您的方法不返回任何内容,即它是void。您需要将其设为int并在结尾处添加return fnew;。另一个问题是你每次都是从头开始,每次都会返回2。您需要将fold1fold2字段移到nextNumber行之上。哦,并删除int n参数,因为它没有做任何事情。

答案 4 :(得分:1)

我同意其他帖子的诊断,但不建议成员变量,而是重命名和局部变量。

您可以通过5次致电

来要求第5个Fibonacci-Number
fib.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;
    }
}
}

您可以在课堂外调用此方法;