![](/img/trans.png)
[英]Java: Encountering ConcurrentModificationException. There's something wrong with my iterators and/or HashMaps, and I don't know what it is
[英]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);
}
}
讓我們來看看。 假設它第一次運行時, 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
的類(否則此代碼將無法編譯)。 這可能是一個壞主意,因為它會導致你得到你的困惑與Object
類和Object
是內置到Java類。 我建議你重命名那個類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.