gpt4 book ai didi

java - 搜索数组列表,从数组列表中删除项目,将其添加到其他地方

转载 作者:行者123 更新时间:2023-12-01 18:22:49 24 4
gpt4 key购买 nike

public void drop (String name) - 如果合适,从 ArrayList 中删除该项目并将其添加到当前房间。使用以下选项之一更新游戏消息:1) 玩家没有持有该元素,2) 房间已经有元素,或 3) 玩家已成功将元素扔到房间中。这是此方法的目标,但当我运行它时,它总是跳到 else 语句中的 currentMessage。

问题:我遇到的问题是,当我运行此方法并尝试将一个项目放入房间时,它不会跳到 else 语句并返回消息“您没有该项目”,我不知道为什么会这样正在执行此操作,但未完成第一个 if 语句,因为我正在输入一个我知道在数组列表中的项目名称。

public void drop(String name)
{
for(Item count : myArray){
if(count.getName().contains(name) && currentRoom.hasItem() == false){
currentRoom.addItem(count);
currentMessage = "you have successfully dropped the item in the room";
myArray.remove(count);
}
else if(count.getName().contains(name) && currentRoom.hasItem() == true)
{
currentMessage = "the room already has an item";
}
else
{
currentMessage = "you do not have that item";
}
}
}

最佳答案

这将引发 ConcurrentModificationException,因为修改列表时无法使用 foreach 循环。相反,迭代器支持 Iterator.remove() 方法,该方法允许您从底层集合中删除对象:

public void drop(String name)
{
Iterator<Item> it = myArray.iterator();
Item count = it.next();
while(count != null){
if(count.getName().contains(name) && currentRoom.hasItem() == false){
currentRoom.addItem(count);
currentMessage = "you have successfully dropped the item in the room";
it.remove();
}
else if(count.getName().contains(name) && currentRoom.hasItem() == true)
{
currentMessage = "the room already has an item";
}
else
{
currentMessage = "you do not have that item";
}
count = it.next();
}
}

关于java - 搜索数组列表,从数组列表中删除项目,将其添加到其他地方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27193801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com