0

我目前正在学习 Java 编程课程,我们正在讨论动态数组的主题。我们被要求编写一个使用动态数组的程序来打印出斐波那契数列。

这就是我所拥有的:

public class Fibonacci {
    private static int[] data;

    public static void DynamicArray() {
        data = new int[1];
    }

    public static int get(int position) {
        if (position >= data.length){
            return 0;
        } else {
            return data[position];
        }
    }

    public static void put(int position, int value) {
        if(position >= data.length) {
            int newSize = 2 * position;
            int[] newData = new int[newSize];
            System.arraycopy(data, 0, newData, 0, data.length);
            data = newData;
        }
        data[position] = value;
    }

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

谢谢!

4

5 回答 5

1

数组是静态的,因为您使用大小创建它。对于动态,使用 ArrayList。ArrayList 也是一个数组。ArrayList 的默认大小为 10,当达到总大小的 75% 时增长 25%(总大小)。但是它很慢,因为当 ArrayList 达到 75%size 时,java 会创建一个新的 Array 并将数据复制到内存中的新数组。您可以使用 LinkedList,读写数据比 ArrayList 更快,用于读取数据。

于 2021-05-22T12:30:00.350 回答
0

在 Java 中,数组是静态的。一旦它们被初始化,它们就不能“增长”。有几种数据结构可以解决这个问题(例如链表)。

如果要调整数组的大小,则必须创建一个具有所需大小的新数组,然后将旧数组中的所有条目复制到新数组中。Java 对这种“动态数组”的实现是 ArrayList。然而这不是很快

于 2013-02-13T23:32:18.277 回答
0
 while (sequence<4000000)
            {
                   i++;
                   sequence = fibonacciSequence[0]+fibonacciSequence[1];
                   System.out.println(sequence);
                   if (i%2!=0)
                   {
                     fibonacciSequence[0]=sequence;  
                   }
                   else
                   {
                     fibonacciSequence[1]=sequence;  
                   }
                   if (sequence%2==0)
                   {
                    sumEvenTerm = sumEvenTerm + sequence; 
                   }
             }

@Randy 在这里感谢您的回答。在这种情况下,我们确实知道斐波那契数列的长度。在某些情况下,我们不知道长度。我们所知道的是某个斐波那契数的值。我们不能使用上面的程序。

您可以更改 while 循环中的值以满足您的需要。

于 2014-02-02T12:14:18.447 回答
0

我必须做同样的事情别担心它会简单得多然后你让它看看我有你想要的代码

   import java.util.Scanner;

        public class DynamicArray
        {
            public static void

d main (String[] args){
        System.out.println("How Long Do You Want To see the Fibonacci Series?");
        Scanner scan = new Scanner (System.in);
        int Length = scan.nextInt();

            int[] Fibonacci = new int[Length];
            Fibonacci[0] = 0;
            Fibonacci[1] = 1;
            System.out.println("Fibonacci Series");

            System.out.println(Fibonacci[0]);

            for (int i = 2; i<Length; i++){
                Fibonacci[i]=Fibonacci[i-2]+Fibonacci[i-1];

        System.out.println(Fibonacci[i]);

            }
        }
    }

所以这里发生的事情是,我声明的长度变量是由用户输入的,它决定了数组将打印多远的斐波那契数列,一旦你知道你要做什么,它就相当简单了。所以这就是你所需要的,因为这是你的老师想要的,希望对你有所帮助。:D

于 2013-04-13T17:30:18.630 回答
0

如果您使用 .push() 方法,它是否算作动态数组?如果没问题,您可以只计算斐波那契数列中的下一个数字并使用 MyArray.push(currentFibonacci);

于 2013-02-13T23:10:21.173 回答