2014-02-19 87 views
0

我想改變一個字符串數組的大小,但我不知道還有什麼要嘗試和這種方法不工作。這裏是我的代碼:更改Java中的數組大小

import java.util.Scanner; 

public class test{ 
    public static void main(String[] args){ 
     String[] names; 
     names = new String[5]; 
     for(int i=0; i<10; ++i){ 
      addToArray(names, i, "blah"); 
     } 
     System.out.println(names.length); 
     System.out.println("bye"); 
    } 

    public static void addToArray(String[] names, int i, String name){ 
     if (i < names.length){ 
      names[i] = name; 
     } 
     else { 
      String[] temp; 
      temp = new String[names.length + 10]; 
      System.arraycopy(names, 0, temp, 0, names.length); 
      addToArray(temp, i, name); 
      names = temp; 
     } 
    } 
} 

我的問題是,當我運行它,它打印出我的陣列的最終長度爲5的時候,應該說15

+0

可能重複(http://stackoverflow.com/questions/13197702/resize -an-array-while-keeping-current-elements-in-java) –

+0

@ user2310289 nope。我看着那個,我的努力使用了建議的System.arraycopy。我對我的問題並不是非常具體,但是當我打印數組的長度爲5時,我期望它是10. – Broseph

回答

6

的問題是,你可以」 T改變您的任何(Object)方法參數的引用,所以......

names = temp; 

只改變addToArray方法的範疇內的names變量的引用。您應該使用return聲明,而不是...

public static String[] addToArray(String[] names, int i, String name){ 
    if (i < names.length){ 
     names[i] = name; 
    } 
    else { 
     String[] temp; 
     temp = new String[names.length + 10]; 
     System.arraycopy(names, 0, temp, 0, names.length); 
     names = addToArray(temp, i, name); 
    } 
    return names; 
} 

不要忘了保持,一旦方法返回的參考...

for(int i=0; i<10; ++i){ 
    names = addToArray(names, i, "blah"); 
} 
2

一旦陣列已創建的該尺寸數組無法更改。數組一旦創建就可以容納一定數量的對象。

然而,ArrayList能夠動態地改變它保存的對象的數量。初始化一個簡單ArrayList一種方法將是:

ArrayList<String> stringArrayList = new ArrayList<>(); 
+0

他沒有改變現有數組的大小,他創建了一個更大的新數組大小,將元素複製到其中,然後使該臨時數組成爲新數組。這只是他的參考是有點關閉......他需要使用回報。 –

+0

雖然我會一直認同,但我們需要更多的背景知道爲什麼OP選擇手動動態調整陣列大小。此外,這幾乎就是'ArrayList'所做的任何事情,它只是由需要調整大小的數組支持;) – MadProgrammer

+0

我這樣做是手動的,因爲我根本沒有使用Java的經驗,哈哈。我的主要語言是Python:p。我主要是通過我的C經驗來學習這一點。 – Broseph

0

變化的返回類型爲字符串[]返回名稱addToArray()方法和分配名稱= addToArray(字符串[]名稱,INT我,字符串名稱);在mainMethod從而可以維持保持在Java中,參照跟蹤時,尺寸的增加

1

三點

  1. 數組是特殊的對象,他們有一個簡單的屬性 命名length這是final
  2. 此外,您正在創建一個新的數組,而不是重新調整原始數組的大小。
  3. 你不能改變您的任何方法的參數參考
的[在保持Java的潮流元素,調整數組大小?]
+0

那麼,他不是完全想要改變現有數組的大小。他已經展示了對你所說的內容的基本理解,所以他正在嘗試創建一個新的數組並指向它。 –

+0

@Noobacode我希望我的編輯更好地解釋了我的想法 –

+0

是的,它好多了。 –