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

10-07 13:06