我有一个数组列表“items”,其中包含来自父类(super class)的项目及其子类的项目。
for (Item item : items)
{
if (item.getLocation() == location)
{
System.out.println(item.getDescription() + " is in this location");
if (item instanceof Monster)
{
Monster monster = (Monster)item;
if (monster.hasDied())
{
System.out.println(monster.getDescription() + " has been defeated!");
items.remove(monster);
}
}
}
}
如果发现怪物已经死了,我会尝试从数组列表中删除该怪物。所有方法都有效,我知道在 foreach 循环中无法从数组列表中删除项目,如上所示。我之前使用下面的代码从数组列表中删除怪物,但是这是当有单独的“项目”和“怪物”数组列表时。它们现在都在同一个“items”数组列表中,因为“Monster”类是“Item”类的子类。
Iterator<Monster> iter = monsters.iterator();
while (iter.hasNext())
{
Monster monster = iter.next();
if (monster.hasDied())
{
if (monster.getLocation() == location)
{
System.out.println(monster.getDescription() + " has been defeated!");
iter.remove();
}
else
{
iter.remove();
}
}
}
我是否可以采用任一方法来从数组列表中删除指定的怪物?
感谢您的帮助!
最佳答案
当然 - 您需要做的就是结合您拥有的两种方法:
- 按照第二种方法中的方式使用
Iterator
迭代列表; - 按照第一种方法检查当前
item
是否为Monster
。这种组合可以让您找到怪物
,并使用迭代器删除
它。
以下是您可以执行此操作的方法:
Iterator<Item> iter = items.iterator();
while (iter.hasNext())
{
Item item = iter.next();
if (item instanceof Monster)
{
Monster monster = (Monster)item;
if (monster.hasDied())
{
if (monster.getLocation() == location)
{
System.out.println(monster.getDescription() + " has been defeated!");
iter.remove();
}
else
{
iter.remove();
}
}
}
}
关于java - 从包含子类和父类(super class)项的数组列表中删除项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17466845/