スーパークラスのアイテムとそのサブクラスのアイテムを含む配列リスト「アイテム」があります。
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 ループ中に arraylist からアイテムを削除できないことを認識しています。以前、配列リストからモンスターを削除するために以下のコードを使用しましたが、これは個別の「アイテム」と「モンスター」配列リストがあった場合でした。「Monster」クラスは「Item」クラスのサブクラスであるため、これらは両方とも同じ「items」配列リストにあります。
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();
}
}
}
とにかく、指定されたモンスターを配列リストから削除するためにどちらかのアプローチを適応させることはできますか?
ご協力いただきありがとうございます!