2014-01-13 4 views
0

Я пытаюсь заменить значение в моем строчном массиве, но мой аррайалист просто добавляет вместо замены.ArrayList заполняется вместо замены индекса java

temp - это строка, которая берет значение из буферизатора. player_status_line - мой строковый архаист.

Я не вижу, что я делаю неправильно. Я проверяю размер массива, и если он содержит имя пользователя (getName [2]), я устанавливаю новое значение в одно и то же место.

Это то, что я сделал, но почему-то все еще сохраняет все. Пробовал пройти код, но не вижу проблемы.

Код редактируется *

while ((checkIfPlayer = bReader.readLine()) != null) { 
    // Arraylist 
    String temp = checkIfPlayer.trim(); 
    System.out.println(temp); 
    if (temp.contains("ZOMBIE") || temp.contains("HUMAN")) { 
     String[] getName = temp.split(" "); 
     String checkName = getName[2]; 
     if (!player_status_list.contains(checkName)) { 
      player_status_list.add(temp); 
     } else if (player_status_list.contains(checkName)) { 
      for (int i = 0; i < player_status_list.size(); i++) { 
       player_status_list.set(i, temp); 
      } 
     } 
     DrawTheMap(); 
    } 
} 
+2

Если бы я тебя, я бы собрать небольшой тест, который демонстрирует поведение. Просто основной метод, который делает аналогичную вещь, используя жестко заданные значения и предопределенный список. Таким образом, мы можем запускать код для себя и точно видеть, о чем вы говорите. –

+0

Что в действительности используется 'temp' в строке? – gtgaxiola

+0

Отредактировал свой ответ в ответ на изменение кода. – gtgaxiola

ответ

0

чек неверны по адресу:

if (!player_status_list.contains(checkName)) { 
    player_status_list.add(temp); 
} else if (player_status_list.contains(checkName)) { 
    for (int i = 0; i < player_status_list.size(); i++) { 
     player_status_list.set(i, temp); 
    } 
} 

Вот разбивка со встроенными комментариями:

//temp = "4711 PLAYER joseph HUMAN 30.1 30.1"; 
//checkName = "joseph" 

//This is checking if the list contains: "joseph" 
if (!player_status_list.contains(checkName)) { 
    //If it doesn't have it we are adding: "4711 PLAYER joseph HUMAN 30.1 30.1"; 
    //This doesn't seem right!!! 
    player_status_list.add(temp); 

    //This will never happen because list is always adding the temp variable not the name 
} else if (player_status_list.contains(checkName)) { 
    for (int i = 0; i < player_status_list.size(); i++) { 
     player_status_list.set(i, temp); 
    } 
} 

Попробуйте следующее:

while ((checkIfPlayer = bReader.readLine()) != null) { 
    // Arraylist 
    String temp = checkIfPlayer.trim(); 
    System.out.println(temp); 
    if (temp.contains("ZOMBIE") || temp.contains("HUMAN")) { 
     String[] getName = temp.split(" "); 
     String checkName = getName[2]; 
     boolean added = false; 
     for(int i = 0; i < player_status_list.size(); i++) { 
      if(player_status_list.get(i).contains(checkName)) { 
       player_status_list.set(i, temp); 
       added = true; 
      } 
     } 
     if(!added) { 
      player_status_list.add(temp); 
     } 
     DrawTheMap(); 
    } 
} 

Входы я тестировал (Очевидно, я закомментировал DrawTheMap() часть)

ASYNC PLAYER joseph HUMAN 30.0 30.0 
ASYNC PLAYER joseph HUMAN 50.0 80.0 
ASYNC PLAYER BOB ZOMBIE 30.0 30.0 
ASYNC PLAYER GIL ZOMBIE 30.0 30.0 

Это результирующее player_status_list я получаю:

ASYNC PLAYER joseph HUMAN 50.0 80.0 
ASYNC PLAYER BOB ZOMBIE 30.0 30.0 
ASYNC PLAYER GIL ZOMBIE 30.0 30.0 
+0

Итак, я изменил код a litte: –

+0

Помогло ли вам это? – gtgaxiola

+0

Я забыл изменить свой код. Сделал это сейчас, не вижу, что я делаю неправильно, так как он продолжает добавлять к arraylist. –

0

В ваш цикл, сначала проверьте, чтобы увидеть Если player_status_list.get (i) == checkName и только затем замените переменную в этом индексе с помощью checkName.

Вы также можете упростить весь код, отправленный выполнив:

if !containsname 
    add name 
else 
    find index at the name (maybe use forloop) 
    replace at index with name 
+0

Эй, я считаю, что я изменил его так, как вы сказали, было проще, но он все еще добавляет больше и mroe в arraylist.Я делаю это приложение для Android в течение 8 часов прямо сейчас, так что моя голова немного не работает: P –

Смежные вопросы