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>();
的ArrayList
我已将getCreatures()方法更改为 public ArrayList getCreatures(){ return this.critArr; }
不需要计数,因为那只是critArr.size()。
如果需要更多详情,请告知我们 我程序的基本结构 房间等级 - 生物 生物类 - 定义生物
所以房间里可以有生物。我有多个房间,通过北,东,西,南的简单界面建立并相互连接。不需要的信息,但这可以让你理解这一点。谢谢你的帮助。
答案 0 :(得分:3)
List
- list.get(idx)
.length
是.size()
list.set(idx, value)
(但您通常使用list.add(value)
)这就是从数组转换到列表所需要知道的所有内容。
答案 1 :(得分:2)
而不是
getCreatures()[i]
使用
getCreatures().get(i)
答案 2 :(得分:2)
对于集合,通常使用增强的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循环,这是不可能的;这是非常有意的。