Обход ArrayList с помощью Iterator и установка объекта с instanceof - PullRequest
0 голосов
/ 22 октября 2019

У меня есть ArrayList объектов и итератор, который их обходит. Я пытаюсь найти экземпляр объекта Ant в списке и назначить его переменной ant.

while(iterator.hasNext()) {
    if(iterator.getNext() instanceof Ant) {
        Ant ant = (Ant)iterator.getNext();
    }
}

Так как iterator.getNext () увеличивает итератор при вызове, приведенный выше код назначает объектпосле муравья к муравьиной переменной. Мне было интересно, как я могу правильно назначить объект Ant в списке переменной ant.

Ответы [ 2 ]

1 голос
/ 22 октября 2019

Вы вызываете .getNext() дважды, так что вы фактически используете объект после того, как проверяете.

Попробуйте это:

while(iterator.hasNext()) {
  Object obj = iterator.next();
  if (obj instanceof Ant) {
    Ant ant = (Ant)obj;
  }
}

Также следует отметить, что это.next() не .getNext() для извлечения базового объекта в итераторе.

0 голосов
/ 22 октября 2019

Это происходит потому, что вы вызываете iterator.getNext() дважды: сначала в условии, а затем в теле условия, поэтому вы пропустили первое значение и попробуйте второй для типа Ant. Вам нужен код типа

while(iterator.hasNext()) {
            Object obj = null; 
            if((obj = iterator.getNext()) instanceof Ant) {
                Ant ant = (Ant)obj;
            }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...