Как бы я изменил этот метод для работы с ArrayList? - PullRequest
0 голосов
/ 20 апреля 2011
public void critReactRoomStateChange(String command, PC pc, String name) {
    Creature temp = null;
    for (int i = 0; i < getCount(); i++) {
        if (!(getCreatures()[i] instanceof PC) && !(getCreatures()[i].getName().equals(name))) {
            temp = getCreatures()[i];
            if (temp != null) {
                getCreatures()[i].reactStateChange(command, pc);
                temp.checkNewRoom();
                if (!temp.equals(getCreatures()[i])) {
                    i--;
                }
            }
        }
    }
}

Так что я перешел от наличия Частное Существо [] существа;
массив чтобы иметь

private ArrayList<Creature> critArr = new ArrayList<Creature>();

ArrayList

Я изменил метод getCreatures () на public ArrayList getCreatures () { вернуть this.critArr; }

Счет не понадобится, так как это просто critArr.size ().

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.
Основная структура моей программы Класс комнаты удерживает существ Класс существ -определение существ

так что в комнате могут быть существа. У меня есть несколько комнат, которые установлены и связаны друг с другом через простой интерфейс север, восток, запад, юг. Не нужна информация, но это позволяет понять суть. Спасибо за любую помощь.

Ответы [ 3 ]

3 голосов
/ 20 апреля 2011
  • индекс доступа в List - list.get(idx)
  • .length - это .size()
  • индекс присваивается list.set(idx, value) (но вы обычно используете list.add(value))

Это все, что вам нужно знать для перехода из массива в список.

2 голосов
/ 20 апреля 2011

Для коллекций обычно рекомендуется использовать расширенный цикл for.

public void critReactRoomStateChange(String command, PC pc, String name) {
    List<Creature> creatures = getCreatures();
    for (Creature c : creatures) {
        if (!(c instanceof PC) && !(c.getName().equals(name))) {
                c.reactStateChange(command, pc);
                c.checkNewRoom();
//                    if (!temp.equals(c)) {
//                        i--;
//                    }
        }
    }
}

Обратите внимание, насколько короче код без всех этих вызовов getCreatures () [i] во всемместо.Я также отбросил нулевую проверку, так как она избыточна.instanceof уже охватывает это.

Редактировать Сокращенный код также помогает выделить возможную ошибку.Проверка на !temp.equals(getCreatures()[i]) не имеет смысла, потому что вы всегда сравниваете одни и те же объекты.Я понятия не имею, что вы хотели уменьшить индекс цикла, чтобы вернуться к предыдущему узлу.Как правило, очень необычно связываться с индексом цикла, как в цикле for.С расширенным циклом for это невозможно;и это очень намеренно.

2 голосов
/ 20 апреля 2011

Вместо

getCreatures()[i]

используйте

getCreatures().get(i)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...