2014-09-27 50 views
-1

的TE尺寸我有這樣來完成:增加陣列

public class TabCouples { 

private Couple[] tab; 
private final int size = 10; 


public TabCouples() 
{ 
    //some code 1 
} 

public void add(Couple C) 
{ 
    //some code 2 
} 

其中夫婦是具有構造夫婦類(INT A,INT B)。在將C添加到它之前,add方法應該按大小增加我的數組大小。 所以我想創建一個新的數組,然後在增加它的大小之前將這些元素複製到新的數組中。我如何實現這個給定的上述骨架

+2

這是你的作業嗎?你正試圖實現'ArrayList',除非明確地指定你的任務,否則不要這樣做。 – Dici 2014-09-27 21:37:33

+0

是啊這是有點功課...我只是需要一個提示如何做到這一點 – 2014-09-27 21:41:17

+0

如果你改變你的數組長度爲什麼你使用可變數組夫婦[]? – santalu 2014-09-27 21:43:25

回答

2

你不能改變一個數組的大小,但你可以創建一個新的,並複製它上面的舊數組。

所以你的方法:

public void add (Couple c){ 
    Couple[] newTab = Arrays.copyOf(tab, tab.length +size); 
    tab= newTab; 
    // add the new element on the new array tab 

} 

注:你應該使用ArrayList,因爲我們甚至在其他問題建議你,除非你有一個很好的理由這樣做:)。 所以請不要問同樣的問題!

+0

最後一個問題:不會tab = newTab給出一個indexoutofbound異常,因爲在我的構造函數中,我會做tab = new Couple [size]; ? – 2014-09-27 21:57:00

+0

否。在tab = newTab之後,變量選項卡將指向長度(大小+舊選項卡)的數組。它會給你一個NullPointerException,如果你在開始調用add(Couple c)之前沒有實例化tab!!這是因爲您需要舊的製表符長度(tab.length)才能創建newTab數組。 – Alboz 2014-09-27 22:02:02

0

你有兩個選擇:

  1. 使用ArrayList

  2. 通過創建一個新數組並將舊數組複製到它自己來實現它。這也需要跟蹤當前數組中當前使用的元素數量。基本上你會重寫ArrayList。這是一個很好的學習練習,但是如果你的任務有其他目標,它可能需要更多的時間。