2013-04-09 58 views
1

我正在为java编程,我需要动态数组的帮助。我环顾四周,找不到符合我简单程度的方法。我在班上并不遥远,只是学习了基础知识,所以我不太了解,但我需要知道如何制作动态数组。Java动态数组

下面是我们给出的两个示例程序:第二个应该是继承了第一,并允许您创建多个阵列一旦被输入

public class DynamicArrayOfInt 
{ 
    private int[] data; 
    public DynamicArrayOfInt() 
    { 
     data = new int[1]; 
    } 
    public int get(int position) 
    { 
     if (position >= data.length) 
      return 0; 
     else 
      return data[position]; 
     } 
    public void put(int position, int value) 
    { 
     if (position >= data.length) 
     { 
      int newSize = 2 * data.length; 
      if (position >= newSize) 
       newSize = 2 * position; 
      int[] newData = new int[newSize]; 
      System.arraycopy(data, 0, newData, data.length); 
      data = newData; 
      System.out.println("Size of dynamic array increased to " + newSize); 
     } 
     data[position] = value; 
    } 
} 
` 

2号

import java.util.Scanner; 
public class ReverseWithDynamicArray 
{ 
    public static void main(Sting[] args) 
    { 
     DyanamicArrayOfInt numbers; 
     int numCt; 
     int num; 
     Scanner scan = new Scanner(System.in); 
     numbers = new DynamicArrayOfInt(); 
     numCt = 0; 
     System.out.println("Enter some postive integers; Enter 0 to end"); 
     while (true) 
     { 
      num = scan.nextInt(); 
      if (num <= 0) 
       break; 
      numbers.put(numCt, num); 
      numCt++; 
     } 
     System.out.println("\nYour numbers in reverse order are:\n"); 
     for (int i = numCt - 1; i >= 0; i--) 
     { 
      System.out.println(numbers.get(i)); 
     } 
    } 
} 

英寸但是当我使用这些它说我有一个错误,它说类名ReverseWithDynamicArray只接受如果明确要求注释处理。

+0

我想你在System.arraycopy()中缺少一个参数? – cakil 2013-04-09 00:53:14

回答

1

使用此为您的第一个示例程序,我在System.arraycopy

public class DynamicArrayOfInt 
{ 
private int[] data; 
public DynamicArrayOfInt() 
{ 
    data = new int[1]; 
} 
public int get(int position) 
{ 
    if (position >= data.length) 
     return 0; 
    else 
     return data[position]; 
    } 
public void put(int position, int value) 
{ 
    if (position >= data.length) 
    { 
     int newSize = 2 * data.length; 
     if (position >= newSize) 
      newSize = 2 * position; 
     int[] newData = new int[newSize]; 
     System.arraycopy(data, 0, newData, 0, data.length); 
     data = newData; 
     System.out.println("Size of dynamic array increased to " + newSize); 
    } 
    data[position] = value; 
} 
} 
+0

谢谢你帮助很大 – Nobody 2013-04-13 20:08:53

0

你为什么不试图改变集合的参数? 因为我认为LinkedList最适合它。 虽然我不太了解你的要求。 我想在这里把一些示例代码:

//create a LinkedList object : 
LinkedList ll=new LinkedList(); 

//Add your items in linked list as many as you like 
ll.add("item");// you can also add on a specific position by using ll.add(index, item); 

//for getting the length of your LinkedList use: 
int size=ll.size(); 

//for reversing the list items use : 

Collections.reverse(list);//or you can manually implement it by using size or length of list 

/* for printing the list, simply put it in Sop 
(As toString method is overriden in Collection Framework to give a output string in 
the form like: [collection items separated with comma]) */ 

//注:ArrayList和LinkedList之间的区别是, 的ArrayList实现了RandomAccess接口,所以它提供恒定的访问时间访问任何随机指数。因此,使用ArrayList进行检索是最好的,但对于插入随机位置ArrayList不适用,因为它需要调整ArrayList的大小和几次移位操作。

LinkedList被实现为具有双向链表的节点形式的顺序访问。为了访问任何随机索引,它需要访问该节点的下一个地址。所以对于随机检索/阅读LinkedList是不合适的。但是为了插入一个随机索引,它只需要维护一个要插入的新节点。因此,要插入到列表中的任何地方,或者列表中的列表适合。

我希望它可以帮助你。

+1

我知道这是旧的,但希望人们会阅读这仍然。他要求手动编码的动态数组而不是内置的数组列表/链接列表是因为这是大多数编程类所需要的,以帮助我们了解更多。目前我处于Java类中,我们不允许使用数组列表或内置的链接列表,我们鼓励自己创建。这种做法已经教会了我很多关于Java和编程的知识。 – Blizzardengle 2015-04-23 22:34:32

0

你缺少System.arraycopy一个参数(),以下为java.lang.System.arraycopy()方法

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 

SRC的声明 - 这是源阵列。

srcPos - 这是源数组中的起始位置。

dest - 这是目标数组。

destPos - 这是目标数据中的起始位置。

length - 这是要复制的数组元素的数量。

0

看看java中的集合的原始实现。有很多可用的库。其中一个很好的实现是Trove

我希望你可以节省使用原始集合的空间和时间。