2016-01-09 2 views
2

Я пишу очень простой симулятор мира. Каждый шаг по времени, люди становятся старше, и как только они достигают максимального возраста, они умирают. Я уже успел позволить людям умереть и удалить их с ArrayList. Тем не менее, я хотел бы показать, какие люди погибли в течение каждого временного шага (поэтому какие элементы удалены из ArrayList), но я не знаю, как это сделать. Это мой код:Показать, какие элементы удаляются из Arraylist

for(Iterator<Person> personIterator = persons.iterator(); personIterator.hasNext();) { 
    Person person = personIterator.next(); 
    if (person.getAge() >= Person.MAX_AGE){ 
     personIterator.remove(); 
    } 
} 
+3

Почему бы не оставить отдельный 'List ', который отслеживает мертвых людей? Каждый раз, когда человек умирает, добавьте их в список. –

+0

в коде, где вы можете удалить человека, добавить их в список «умер», а затем удалить их. каждый раз сбрасывать список умерших через цикл старения. – DwB

ответ

0

У вас есть множество вариантов, один может быть просто иметь #die метод на Person класса, который сообщает, как вам нравится:

public class Person { 

    public void die() { 
     System.out.println("Old man Jenkins kicked the bucket"); 
    } 

} 

//Elsewheres 
if (person.getAge() >= Person.MAX_AGE) { 
    person.die(); 
    //remove 
} 

Если вам нужно ссылаться на них в дальнейшем, вы можете добавить их в другую коллекцию.

0

Создать новый список и добавить к этому

for (Iterator <Person> personIterator = persons.iterator(); personIterator.hasNext();) { 
Person person = personIterator.next(); 
if (person.getAge() >= Person.MAX_AGE) { 
    personIterator.remove(); 
    personDead.add(person); // ADDED THIS LINE OF CODE 
} 
} 
1

Вы могли бы аккумулировать элементы Вы удаляете в другую коллекцию, а затем вернуться/печать/все это. Например .:

List<Person> deaths = new LinkedList<>(); 
for(Iterator<Person> personIterator = persons.iterator(); personIterator.hasNext();) { 
    Person person = personIterator.next(); 
    if (person.getAge() >= Person.MAX_AGE) { 
     deaths.add(person); 
     personIterator.remove(); 
    } 
} 
+0

Спасибо! Это работает! Теперь мне удалось распечатать, сколько человек умирает каждый раз. Тем не менее, я хотел бы распечатать, кто это был. Я могу сделать это, используя метод toString. Тем не менее, я хотел бы только распечатать их ID, который является только одной из переменных, и не все в методе toString. – StievieG

0

При использовании метода Снимать в классе ArrayList, он будет возвращать то, что вы удалили. Поэтому я думаю, что у вас может быть что-то, где хранятся люди, которые умирают, а именно еще один ArrayList. Так что-то вроде этого должно работать:

ArrayList<person> dead = new ArrayList<person>(); 
if (person.getAge() >= Person.MAX_AGE){ 
      dead.add(personIterator.remove()); 
      } 

P.S. Я чрезвычайно новичок в кодировании, поэтому это может не сработать ... Я узнал, как использовать массивы и ArrayLists вчера. (Этот код предполагает, что существует класс человека, в котором находится материал)

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