我不知道怎么了
I don't know what's wrong
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);
}
}
让我们看看。假设第一次 运行s,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)
。
结果:框再次添加和删除。
哦,是的,调试器也会告诉你同样的事情。
你的问题是你的 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
的 class(否则此代码无法编译)。这可能是个坏主意,因为它会让你在 你的 Object
class 和 Object
class 之间混淆内置于 Java 中。我建议你重命名 class.
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);
}
}
让我们看看。假设第一次 运行s,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)
。
结果:框再次添加和删除。
哦,是的,调试器也会告诉你同样的事情。
你的问题是你的 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
的 class(否则此代码无法编译)。这可能是个坏主意,因为它会让你在 你的 Object
class 和 Object
class 之间混淆内置于 Java 中。我建议你重命名 class.