如何更改此方法以使用ArrayList?

时间:2011-04-19 21:25:00

标签: java arraylist

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()。

如果需要更多详情,请告知我们 我程序的基本结构 房间等级    - 生物 生物类    - 定义生物

所以房间里可以有生物。我有多个房间,通过北,东,西,南的简单界面建立并相互连接。不需要的信息,但这可以让你理解这一点。谢谢你的帮助。

3 个答案:

答案 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循环,这是不可能的;这是非常有意的。