动态阵列斐波那契

时间:2015-04-20 18:32:01

标签: java fibonacci

我需要打开一个代码,打印出也使用动态数组的Fibonacci系列,这是我到目前为止所做的,我只是不知道如何将它变成动态数组。

public class Fibonacci {
    public static void main(String[] args) {
        int[] numbers;
        numbers = new int[20];
        numbers[0] = 1;
        numbers[1] = 1;
        System.out.println("\nFibonacci series:\n");
        System.out.println(numbers[0]);
        System.out.println(numbers[1]);
        for (int i = 2; i < 20; i++) {
            numbers[i] = numbers[i-2]+numbers[i-1];
            System.out.println(numbers[i]);
        }
    }
}

4 个答案:

答案 0 :(得分:1)

ArrayList类扩展了AbstractList并实现了List接口。
ArrayList支持可以根据需要增长的动态数组。

标准Java数组具有固定长度。创建数组后,它们无法增长或缩小,这意味着您必须事先知道数组将包含多少元素。

使用初始大小创建数组列表。超过此尺寸时,将自动放大该集合。移除对象后,阵列可能会缩小。

它有三个构造函数:

ArrayList( )
ArrayList(Collection c)
ArrayList(int capacity)

除此之外,从父类继承的方法太多了。
示例程序和输出:

import java.util.*;

public class ArrayListDemo {
   public static void main(String args[]) {
      // create an array list
      ArrayList al = new ArrayList();
      System.out.println("Initial size of al: " + al.size());

      // add elements to the array list
      al.add("C");
      al.add("A");
      al.add("E");
      al.add("B");
      al.add("D");
      al.add("F");
      al.add(1, "A2");
      System.out.println("Size of al after additions: " + al.size());

      // display the array list
      System.out.println("Contents of al: " + al);
      // Remove elements from the array list
      al.remove("F");
      al.remove(2);
      System.out.println("Size of al after deletions: " + al.size());
      System.out.println("Contents of al: " + al);
   }
}


输出:

Initial size of al: 0
Size of al after additions: 7
Contents of al: [C, A2, A, E, B, D, F]
Size of al after deletions: 5
Contents of al: [C, A2, E, B, D]


另请阅读: Java Dynamic arrays

答案 1 :(得分:0)

您可以做的一件事是要求用户输入他/她想要的斐波纳契数的值,将其存储在变量中并给出     numbers = new int [n]; 这样你就可以用这种方式实现动态数组。

答案 2 :(得分:0)

动态数组是可以增大的数组,例如ArrayList或向量。经常使用ArrayList。

这是您的问题的解决方案

import java.util.*;
public class fibo{
public static void main()
{
ArrayList<Integer> a = new ArrayList<Integer>();
a.add(0);
a.add(1);
insertoneelement(a);
System.out.println(a.toString());
}
public static void insertoneelement(ArrayList<Integer> x)
{x.add((x.get(x.size()-2)+x.get(x.size()-1)));}
}

使你的循环遍历main()中的insertoneelement(a)所需的多少额外元素,分别形成初始0和1。

ArrayList的索引类似于数组的索引,索引第一个元素是0,最后一个是数组的长度 - 1. size()方法返回ArrayList中的元素数。

答案 3 :(得分:0)

以下是手动动态数组的示例:

public static void main(String[] args) {
    // Fibnocci begins with 0, 1
    int[] fibNumbers = new int[] {0, 1};

    // Set your condition of how many numbers you want to create, 20 in my case.
    // This is also limited to the max value of an integer
    while (fibNumbers.length < 20) {
        // Create a new array for the next number in the sequence
        int[] newFibNumbers = new int[fibNumbers.length + 1];
        // Copy the cotents from your original array to this new array
        System.arraycopy(fibNumbers, 0, newFibNumbers, 0, fibNumbers.length);
        // Calculate the last element which is equal to the sum of the previous two elements
        newFibNumbers[newFibNumbers.length - 1] = newFibNumbers[newFibNumbers.length - 2] + newFibNumbers[newFibNumbers.length - 3];
        // Set the new array to the original array
        fibNumbers = newFibNumbers;
    }

    // Print your fibonacci series
    for (int i = 0; i < fibNumbers.length; i++) {
        System.out.println(fibNumbers[i]);
    }
}

结果:

enter image description here