2011-07-24 2 views
1

Я строю массив, основанный на сравнении двух других массивов. Но когда я инициализирую свой третий массив, я должен установить длину. Но в некоторых случаях мой массив имеет нулевые объекты. Оттуда я могу сбросить пустые/нулевые позиции в массиве. Смотрите мой код до сих пор ниже:Удалить значение Null array

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

Мне нужно, чтобы получить 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]; 
Смежные вопросы