2013-04-09 56 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

我希望你可以節省使用原始集合的空間和時間。