如何在Java中使用链表显示斐波那契数

如何在Java中使用链表显示斐波那契数,java,linked-list,integer,Java,Linked List,Integer,我使用链表创建了一个类来显示20个斐波那契数。这是我的密码: import java.util.LinkedList; public class FibonacciLinkList { private LinkedList<Integer> fibonacciList; public FibonacciLinkList(LinkedList<Integer> FibonacciLinkList) { this.fibonacciList

我使用链表创建了一个类来显示20个斐波那契数。这是我的密码:

import java.util.LinkedList;

public class FibonacciLinkList {
    private LinkedList<Integer> fibonacciList;

    public FibonacciLinkList(LinkedList<Integer> FibonacciLinkList) {
        this.fibonacciList = FibonacciLinkList;
    }

    public LinkedList<Integer> sum()
    {
        int n, a = 0, b = 0, c = 1;

        for(int i = 1; i <= 20; i++)
        {
            a = b;
            b = c;
            c = a + b;
        }
        return fibonacciList;
    }

    public void display() {
        System.out.println(fibonacciList);  
    }

    public static void main(String[] args) {
        LinkedList fibonacciList = new LinkedList();
        fibonacciList.display();  //This is where the error is
    }
}
import java.util.LinkedList;
公共类FibonacciLinkList{
私有链接列表fibonacciList;
公共FibonacciLinkList(链接列表FibonacciLinkList){
this.fibonacciList=FibonacciLinkList;
}
公共链接列表总和()
{
int n,a=0,b=0,c=1;
对于(int i=1;i我修复了您的代码:

import java.util.LinkedList;

public class FibonacciLinkList {
    private LinkedList<Integer> fibonacciList;

    public FibonacciLinkList() {
        this.fibonacciList = new LinkedList<Integer>();
    }

    public LinkedList<Integer> sum()
    {
        int n, a = 0, b = 0, c = 1;

        for(int i = 1; i <= 20; i++)
        {
            fibonacciList.add(a);
            a = b;
            b = c;
            c = a + b;
        }
        return fibonacciList;
    }

    public void display() {
        System.out.println(fibonacciList);  
    }

    public static void main(String[] args) {
        FibonacciLinkList fibonacciList = new FibonacciLinkList();
        fibonacciList.sum();
        fibonacciList.display();
    }
}
import java.util.LinkedList;
公共类FibonacciLinkList{
私有链接列表fibonacciList;
公共FibonacciLinkList(){
this.fibonacciList=newlinkedlist();
}
公共链接列表总和()
{
int n,a=0,b=0,c=1;

对于(int i=1;i,如我所述,
LinkedList
不是
FibonacciLinkedList
的实例,并且它不具有
display()
方法。试图在
LinkedList
对象上调用它将导致编译失败

sum()

我建议您使用
LinkedList
类并在实例化时生成项。然后,使用默认的toString()可以显示到控制台。毕竟,该类只是LinkedList数据结构的扩展,用于存储最多20个斐波那契数

在扩展
LinkedList
时,您将继承一个方法,该方法的“字符串表示法由集合元素列表按迭代器返回的顺序组成,并用方括号(“[]”)括起来。”

公共类FibonacciLinkedList扩展了LinkedList{
公共FibonacciLinkedList(int n){
int a=0,b=0,c=1;

对于(int i=1;i,您需要注意以下几点:

  • 从不调用
    sum()
  • sum()
    中的查找不改变
    fibonacciList
    ,它只使用局部变量,不做任何其他操作
  • display()
    不是LinkedList函数,因此它可能不起作用。即使它起作用,也可能不会显示您期望的内容:您需要循环列表并打印每个值
  • 在main函数中创建了另一个
    fibonacciList
    ,因此显示器(如果工作)将显示本地列表的内容,而不是全局列表的内容

提示:
sum
中的循环实际上没有任何作用。您从具有特定值的局部变量开始,然后修改这些局部变量。您永远不会向列表中添加任何内容。因为fibonacciList不是FibonacciLinkedList。即使您扩展了LinkedList,也无法访问display()方法,因为它不属于LinkedList类。我建议单步执行调试器中的代码,以更好地了解程序实际在做/不在做什么。1)
LinkedList
主要应该是
FibonacciLinkList
。2)永远不会调用方法
sum
。3)方法
sum
从未添加到字段
fibonacciList
。感谢您的反馈。这有助于更好地理解问题。
public class FibonacciLinkedList extends LinkedList<Integer> {
    public FibonacciLinkedList(int n){
        int a = 0, b = 0, c = 1;
        for(int i = 1; i <= n; i++) {
            a = b;
            b = c;
            c = a + b;
            this.add(c);
        }
    }

    public void display() {
        System.out.println(this.toString());
    }

    public static void main(String[] args) {
        FibonacciLinkedList list = new FibonacciLinkedList(20);
        list.display();
    }
}