我正在编写一个非常简单的世界模拟器。每一步,人们都会变老,一旦达到最大年龄,他们就会死亡。我已经设法让人们死亡并将其从ArrayList
移除。但是,我想说明在每个时间步骤中哪些人死亡(因此哪些元素从ArrayList
中移除),但我不知道该怎么做。这是我的代码:
for(Iterator<Person> personIterator = persons.iterator(); personIterator.hasNext();) {
Person person = personIterator.next();
if (person.getAge() >= Person.MAX_AGE){
personIterator.remove();
}
}
答案 0 :(得分:1)
您可以将您删除的元素累积到另一个集合中,然后返回/打印/不管它。 E.g:
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();
}
}
答案 1 :(得分: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
}
如果您稍后需要引用它们,则可以将它们添加到另一个集合中。
答案 2 :(得分: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
}
}
答案 3 :(得分:0)
当您在ArrayList类中使用remove方法时,它将返回您删除的内容。所以我认为你可以有东西存储死亡的人,即另一个ArrayList。所以这样的事情应该有效:
ArrayList<person> dead = new ArrayList<person>();
if (person.getAge() >= Person.MAX_AGE){
dead.add(personIterator.remove());
}
P.S。我对编码非常新,所以这可能不起作用......我昨天学会了如何使用数组和ArrayLists。 (这段代码假设有一个人类,这些东西在里面)