我目前正在Minecraft Spot开发一个插件。我不相信这是一个龙头的问题,虽然,我相信这是一个Java的问题。在我的类中有一个名为setInjury()的方法,它应该复制一个列表,从副本中删除一个项目,并将列表替换为新的列表。奇怪的是,这还管用。但对于一个项目,它只是拒绝删除它。它会删除其他的,但不是这一个。我检查了弹壳和所有东西。甚至boolean from .remove也说它已经被删除了,但实际上并没有。
(iStore是一个文件配置文件,而store是我的类)
它以前是在if else语句中,但是remove语句中的布尔值是一样的。最奇怪的是昨天还能用。
List<String> sevs = iStore.getStringList(uuid + "." + section);
for(String s : iStore.getStringList(uuid + "." + section)) {
boolean isFracture = s.equals("Fracture") && injury.equals("Broken") ;
if(s.equals(injury)) {
continue;
}
sevs.add("Broken");
sevs.remove(isFracture ? "Fracture" : "Intact");
iStore.set(uuid + "." + section, sevs);
store.saveStore();
}
我的另一个更混乱的代码,做同样的事情,以证明它应该删除它:
List<String> sevs = iStore.getStringList(uuid + "." + section);
for(String s : iStore.getStringList(uuid + "." + section)) {
if(sevs.contains(injury)) {
return;
}else if(injury.equals("Broken") && s.equals("Fracture")){
sevs.add("Broken");
sevs.remove("Fracture");
Bukkit.getLogger().info(Boolean.toString(sevs.remove("Fracture"))); //returns true??
iStore.set(uuid + "." + section, sevs);
store.saveStore();
}else{
sevs.add(injury);
sevs.remove("Intact");
iStore.set(uuid + "." + section, sevs);
store.saveStore();
}
运行代码前的列表:
rlegstat:
- Cured
- Fracture
//Desired result if injury is equal to broken:
rlegstat:
- Cured
- Broken
//Actual results
rlegstat:
- Cured
- Fracture
- Broken
2条答案
按热度按时间jtw3ybtb1#
很难遵循你的确切逻辑(因为你没有给予我们一个完整的方法,例如不清楚
injury
来自哪里),但似乎你根本不需要循环。简单地使用.contains()
、.add()
和.remove()
就足够了:xv8emn3q2#
为了避免不可预测的行为,甚至是潜在的ConcurrentModificationException,而不是使用增强的for循环,使用Iterator,它支持在迭代时删除元素。
或者,您可以使用简单的for循环并向后迭代: