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));
}
}
handler.addObject()
语句中的else
似乎无法访问或无效
来自评论:
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);
}
}
答案 0 :(得分:0)
我们来看看。假设第一次运行,x,y
为1,1
。所以你添加Box(1,1)
。
下次运行时,我们假设x,y
为2,3
。因此,请输入for
循环:
i = 0
:与x,y
不一样,请输入else
,然后添加Box(2,3)
。i = 1
:与x,y
相同(是的,我们刚刚添加了它),因此请输入if
并删除Box(2,3)
。结果:Box已添加并再次删除。
哦,是的,调试器会告诉你同样的事情。
答案 1 :(得分:0)
您的问题是您的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
类之间感到困惑。我建议你重命名那个班。