2014-10-26 42 views
0

我需要動態調整數組的大小,而不是猜測它將包含多少個元素。我有這樣的代碼,但它似乎並沒有工作,任何人都可以幫助我找出什麼是錯的!基本上我需要在找到匹配時繼續添加到匹配數組(另一種方法是爲此實現的)。「調整大小」在Java中的數組,並將其發回

目前它只是填充matches數組,然後給它嘗試放入數組的下一個元素給出ArrayIndexOutOfBoundsException。

以下是2個功能。

由於

private static String[] subStrings(String[] tokens) { 

    String[] matches; 
    matches = new String[40]; //creates a new array of matches 

    for (int i = 0; i <=tokens.length; i++){ 

     for (int j = i+1; j <tokens.length;j++){ 

      if(Text.match(tokens[i],tokens[j])){ 

       matches[i]=(tokens[i]+" | "+tokens[j]); 
       System.out.println(matches[i]); 

       if(matches[matches.length-1]!=null){ 
        reSize(matches, matches.length+10); 

       } 
      } 
     } 

    } 

公共靜態字符串[]調整尺寸(字符串[]匹配,int類型){

if(s<0){ 
     return null; 
    } 

    String BiggerMatch[] = new String[s]; 

    for(int i=0; i< matches.length; ++i){ 

     BiggerMatch[i]=matches[i]; //saves the original array in a temporary variable 
    } 

    matches = new String[s]; //adds s integer to the array size of matches 

    for(int i=0; i<=matches.length - s ; i++){ //leaves s spaces null at the end of the array 
     matches[i]= BiggerMatch[i]; 
    } 

    matches = BiggerMatch; 
    subStrings(matches); //sending the new array back to the subStrings method 
    return BiggerMatch;//returns the new array 
} 

}

+1

爲什麼不使用ArrayList?它是一個動態數據結構,因此您不需要調整大小。 – 2014-10-26 19:33:31

+0

你不能(即使你可以僞造它)調整數組的大小。這不是他們想要的。數組用於__fixed__數量的數據。這聽起來像你可能想要一個'ArrayList'來代替。 – BitNinja 2014-10-26 19:33:41

+0

我需要遵循的參數是 //相反,我也希望您編寫(並使用)一種方法,在必要時調整數組的大小。 //然而,你知道數組不能調整大小。 \t \t \t //這意味着你的方法是真的要值從一個小數組複製到一個大陣 \t \t \t //並返回大陣 – 2014-10-26 19:35:24

回答

0

使用一個ArrayList。 ArrayLists是具有相同類型的支持數組的列表。

ArrayLists遵循一定的調整策略(另請參閱:ArrayList: how does the size increase?)。因此,如果元素超過後備數組的大小,將創建一個新數組,並且將複製「舊」數組中的元素。

如果你真的需要有數組作爲返回值,你可以簡單地使用List的toArray方法:

ArrayList<String> matches = new ArrayList<String>(); 
.... 
for(....) { 
    matches.add(someString); 
} 
.... 
return matches.toArray(new String[matches.size()]); 
0
public String[] resize(String[] original, int extra) { 
    // You are right you can't resize an array, 
    // But we can make a new one with extra amount of indexes 
    String[] newArray = new String[original.length + extra]; 
    // Then we need to copy the original memory over to the new 
    // array. This leaves the end of the array all null. 
    System.arrayCopy(original, 0, newArray, 0, original.length); 
    // Then return it 
    return newArray; 
} 

現在在使用這個你已經做到以下幾點在你調用代碼,

/// .... 
if (matches[matches.length-1] != null) { 
    matches = resize(matches, 10); 
} 

這是因爲像你說的,你不能真正調整數組的大小。因此,您需要將此堆棧上下文中的數組替換爲resize方法創建的數組。

相關問題