如何使用Java动态数组

时间:2013-02-13 22:53:13

标签: java arrays dynamic

我目前正在学习Java编程课程,我们的主题是动态数组。我们被要求使用动态数组编写程序,打印出Fibonacci序列。

这就是我所拥有的:

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]);
        }
    }
}

谢谢!

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

如果使用.push()方法,它是否算作动态数组?如果没关系,你可以计算Fibonacci序列中的下一个数字并使用MyArray.push(currentFibonacci);

答案 2 :(得分:0)

在Java中,数组是静态的。一旦初始化,他们就无法“成长”。 有几种数据结构可以解决这个问题(例如链接列表)。

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

答案 3 :(得分: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]);

            }
        }
    }

所以这里发生的是我声明的长度变量是由用户输入的,用于确定阵列打印Fibonacci系列的距离,一旦你知道你想要做什么就会很简单。所以这就是你需要的,因为这是你的老师希望它有所帮助。 :d

答案 4 :(得分: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感谢您的回答。在这种情况下,我们确实知道了fibonnaci序列的长度。在某些情况下,我们不知道长度。我们所知道的是一些斐波纳西数的价值。我们不能使用上述程序。

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