Рефакторинг класса с использованием ArrayList для использования HashMap (Java) - PullRequest
0 голосов
/ 26 апреля 2011

Мне сказали изменить все на HashMap () вместо ArrayList (), и по большей части все работало идеально. Однако у меня возникла проблема с тем, чтобы этот метод работал правильно.

мой HashMap () выглядит как

private HashMap critMap = new HashMap ();

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

Это метод с ArrayList ()

public void critReactRoomStateChange2(String command, PC pc, String name) {
    Creature temp = null;
    for (int i = 0; i < critArr.size(); i++) {
        if (!(getCreatures().get(i) instanceof PC) && !(getCreatures().get(i).getName().equals(name))) {
            temp = getCreatures().get(i);
            if (temp != null) {
                getCreatures().get(i).reactStateChange(command, pc);
                temp.checkNewRoom();
                if (!temp.equals(getCreatures().get(i))) {
                    i--;
                }
            }
        }
    }
}

ЭТО МЕТОД ПОСЛЕ ТОГО, ЧТО Я УСТАЛ ДЛЯ РЕАЛИЗАЦИИ HashMap ()

public void critReactRoomStateChange(String command, PC pc, String name) {
    Creature temp = null;
    if (!(getCreatures().get(name) instanceof PC)) {
        temp = getCreatures().get(name);
        if (temp != null) {
            getCreatures().get(name).reactStateChange(command, pc);
            temp.checkNewRoom();
        }
    }
}

getCreatures (). Get (name) принимает имя String, которое передается ему, в качестве ключа hashMap, чтобы найти фактический объект, на который он ссылается. Как указано выше, мой hashMap - это, следовательно, имя существа - это строка (ключ), а значение Creature (содержит другую информацию, кроме имени) - это значение. Когда я вызываю getCreature (). Get (name), я ищу имя ключевой строки и хочу, чтобы оно возвращало объект Creature. Если он не может найти его в hashMap, он должен вернуть ноль, если я не ошибаюсь.

Возможно, я просто упускаю что-то действительно простое. Любая помощь будет принята с благодарностью. Если потребуется больше кода, я с радостью отредактирую его и вставлю.
Спасибо

Редактировать: Класс существа является абстрактным и PC, Animal, NPC все расширяют его. Просто вам не интересно, что делают случайные ПК, NPC и Животные. лол

Edit2: нет ошибок, кроме того, что я не получаю реакции. Он ничего не делает, так что critReactRoomStateChange сейчас не работает. Существа не проходят мимо, поэтому другие методы могут воздействовать на них.

Таким образом, 2-й блок кода не работает должным образом. Это ничего не делает по существу.

1 Ответ

0 голосов
/ 26 апреля 2011

Я вижу, что когда вы использовали ArrayList, вы применили метод getCreatures (). Get (i).Возможно, вы не изменили метод getCreatures () после того, как переключились на HashMap, так как после изменения вам не нужно выполнять цикл и get (i).

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