public void critReactRoomStateChange(String command, PC pc, String name) {
Creature temp = null;
for (int i = 0; i < getCount(); i++) {
if (!(getCreatures()[i] instanceof PC) && !(getCreatures()[i].getName().equals(name))) {
temp = getCreatures()[i];
if (temp != null) {
getCreatures()[i].reactStateChange(command, pc);
temp.checkNewRoom();
if (!temp.equals(getCreatures()[i])) {
i--;
}
}
}
}
}
所以我从拥有一个
私人生物[]生物;
数组
拥有一个
private ArrayList<Creature> critArr = new ArrayList<Creature>();
数组列表
我已经将getCreatures()方法更改为
公共ArrayList getCreatures(){
返回this.critArr;
}
不需要计数,因为这只是critArr.size()。
如果需要更多详细信息,请告诉我。
我程序的基本结构
房间等级
持有生物
生物类
-定义生物
房间几乎可以容纳生物。我有多个房间,它们是通过北,东,西,南的简单界面设置并相互连接的。不需要信息,但这可以使您理解要点。谢谢你的帮助。
最佳答案
对于集合,通常最好使用增强的for循环。
public void critReactRoomStateChange(String command, PC pc, String name) {
List<Creature> creatures = getCreatures();
for (Creature c : creatures) {
if (!(c instanceof PC) && !(c.getName().equals(name))) {
c.reactStateChange(command, pc);
c.checkNewRoom();
// if (!temp.equals(c)) {
// i--;
// }
}
}
}
请注意,没有所有这些getCreatures()[i]调用的地方,代码要短得多。我也删除了空检查,因为它是多余的。 instanceof已经涵盖了这一点。
编辑精简的代码还有助于突出显示可能的错误。
!temp.equals(getCreatures()[i])
的检查没有意义,因为您总是在比较相同的对象。我不知道您的意图是减少循环索引以重新访问上一个节点。通常,像for循环中那样弄乱循环索引是非常不寻常的。使用增强的for循环,这是不可能的。这是非常故意的。