2011-08-24 19 views
0
@Override 

    public boolean onTouchEvent(MotionEvent event) 
     { 

     if (System.currentTimeMillis() - lastClick > 300) 
       { 

       lastClick = System.currentTimeMillis(); 

       synchronized (getHolder()) { 

        for (int i = sprites.size() - 1; i >= 0; i--) <-------why in reverse? 
         { 

         Sprite sprite = sprites.get(i); 

         if (sprite.isCollition(event.getX(), event.getY())) 
           { 

           sprites.remove(sprite); 

           break; 

         } 

        } 

       } 

一個即但是,當我從lastone迭代,以相反的順序它給result.why firstone即..?需要幫助錯誤時持續正常方式

回答

0

這是因爲您在for循環中刪除精靈。當您向前移動時更改循環中的對象數量時,您會填充迭代。當您刪除當前元素時,在此元素(並且仍然要枚舉)後在列表中找到的所有元素現在向下移動索引,即索引爲i+1的元素現在位於索引i處。

如果你正在從循環中移除,你正在迭代,正確的方法是反向迭代,就像你發現的一樣。這樣,當你刪除當前元素時,仍然枚舉的所有其他元素仍處於同一個索引處。

+0

是否約定...?我以相反的方式迭代..... plz解釋清楚........ – sanjay

+0

是的,在很多語言中它是約定。我已經更新了我的答案以進一步解釋。 – link664