我不知道怎么了


if(handler.obj.isEmpty())
    handler.addObject(new Box(x, y, ID.Box));
else{
    for(int i = 0; i < handler.obj.size(); i++){
        Object tempObj = handler.obj.get(i);
        if (tempObj.getX() == x && tempObj.getY() == y && tempObj.getId() == ID.Box)
            handler.removeObect(tempObj);
        else
            handler.addObject(new Box(x, y, ID.Box));
    }
}

else语句中的handler.addObject()似乎不可达或不工作

从评论

:

public class Handler {
    LinkedList<Object> obj = new LinkedList<Object>();
    public void tick(){
        for (int i = 0; i < obj.size();i++){
            Object tempObj = obj.get(i);
            tempObj.tick();
        }
    }
    public void render(Graphics g){
        for (int i = 0; i < obj.size(); i++){
            Object tempObj = obj.get(i);
            tempObj.render(g);
        }
    }
    public void addObject(Object obj){
        this.obj.add(obj);
    }
    public void removeObect(Object obj){
        this.obj.remove(obj);
    }
}

让我们看看。假设第一次运行时,x,y1,1。所以你加了Box(1,1)

下次运行时,假设x,y2,3。因此,输入for loop:

  • i = 0:不相同的x,y,所以输入else,并添加Box(2,3)
  • i = 1:与x,y相同(是的,我们刚刚添加了它),所以输入if并删除Box(2,3)

结果:再次添加和删除盒子。

哦,是的,调试器也会告诉你同样的事情。

您的问题是您的for循环在错误的地方结束。这会导致两种不良症状。

    首先,为列表中不匹配的每个元素添加一次新的Box,而不是只添加一次。
  • 其次,一旦到达循环结束,您将删除刚刚添加的一些新Box对象。

我建议这样重写方法。注意for循环是如何在添加新对象之前结束的——这确保了对象最多只添加一次。还要注意对象被删除后的return语句——这可以做到,因为一旦对象被删除,该方法就没有更多的工作要做了。

public void addOrRemoveBox(int x, int y) {
    for(int i = 0; i < handler.obj.size(); i++){
        Object tempObj = handler.obj.get(i);
        if (tempObj.getX() == x && tempObj.getY() == y && tempObj.getId() == ID.Box) {
            handler.removeObect(tempObj);
            return;
         }
    }
    handler.addObject(new Box(x, y, ID.Box));
}

最后,您似乎已经编写了自己的类Object(否则该代码将无法编译)。这可能是一个坏主意,因为它会使您混淆您的 Object类和内置到Java中的Object类。我建议你重命名这个类

相关内容

  • 没有找到相关文章

最新更新