簡體   English   中英

我不知道怎么了

[英]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,y1,1 所以你添加Box(1,1)

下次運行時,假設x,y2,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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM