2011-07-24 85 views
1

我正在建立一個數組,基於比較兩個其他數組。但是當我初始化我的第三個陣列時,我必須設置長度。但是這使得我的數組在某些情況下有空對象。在那裏,我可以刪除數組中的空/空位置。見我的代碼如下遠:刪除空數組值

private String[] tags  = new String[] { "Mike", "Bob", "Tom", "Greg" }; 
    private boolean[] selected = new boolean[tags.length]; 
    public String[] selected_tags = new String[tags.length]; 

     for (int i = 0; i < tags.length; i++) { 
      if (selected[i] == true){ 
       selected_tags[i] = tags[i]; 
      } 
     } 

我離開了代碼爲構建Boolen selected []的複選框。

無論哪種方式,如果我只選擇2個標籤,然後我selected_tags []數組將Mike, Bob, Null, Null

我需要得到空空出來。提前致謝!

+0

我建議你使用ArrayList來代替。 –

回答

9

您可以使用ArrayList而不是數組。

private String[] tags  = new String[] { "Mike", "Bob", "Tom", "Greg" }; 
private boolean[] selected = new boolean[tags.length]; 
public List<String> selected_tags = new ArrayList<String>(); 

for (int i = 0; i < tags.length; i++) { 
    if (selected[i] == true){ 
     selected_tags.add(tags[i]); 
    } 
} 
+0

可以相信我只是浪費了一個小時,試圖在一起輕鬆地將它們拼湊在一起。謝謝! – Denoteone

+3

@Denoteone請點擊您的問題答案旁邊的複選標記。這樣其他人會立即知道問題得到了解答。 (對所有有用的答案進行投票也很好。) –

+0

@Ted Hop我必須根據有用的反饋來測試我的代碼。我總是投票並接受答案。我道歉,但早上3點,我只是覺得睡着了。 – Denoteone

2

而不是使用一個標準的Java數組,你應該使用一個ArrayList:它會允許你將元素添加到它,根據需要自動增長的列表。


基本上,你首先聲明/實例化的ArrayList,不指定任何大小:

public ArrayList<String> selected_tags = new ArrayList<String>(); 

,然後,在你的循環,你應該使用add()方法添加項目到ArrayList的:

selected_tags.add(tags[i]); 
4

不,你不能刪除空值(和改變數組的長度)你已經創建之後。你必須創建一個新的(或例如使用ArrayList如下圖所示):

List<String> list = new ArrayList<String>(); 

for (int i = 0; i < tags.length; i++) 
    if (selected[i] == true) 
     list.add(tags[i]); 

// Convert it to an array if needed: 
selected_tags = list.toArray(new String[list.size()]); 
2

正如其他人所說,這是與ArrayList容易得多。你甚至可以用toArray函數從它得到一個常規數組。

如果不使用ArrayList,則必須首先計算長度,而不包含null值。正如你所看到的,這有點凌亂:

int length = 0; 
for(boolean b : selected) if(b) ++length; // Count the "true"s 

String[] selected_tags = new String[length]; 
for(int i = 0, j = 0; i < tags.length; i++) 
    if(selected[i]) 
     selected_tags[j++] = tags[i];