2014-02-24 74 views
0

所以我仍然試圖讓這個工作...我需要它告訴我與用戶的位置匹配陣列中的牆壁之一的位置。比較和創建點2D陣列

我輸出所有的座標到控制檯,一切看起來都是正確的,只是當它們相等時它不起作用。 (這工作之前...似乎如果我不在循環中創建牆它會工作,但是一旦我聲明太多的牆它似乎退出工作(不完全確定,但我設置沒有循環的地圖,它沒有始終如一地工作,我無法找出一個理由..

GameObject(user).positionPoint2D和'setPosition兩種設置posiion,

public class Map { 
    public ArrayList<Wall> theseWalls = new ArrayList<Wall>(); 
    private boolean isSomethingThere; 

    public Boolean somethingIsThere(GameObject user){ 
     for(int i = 0; i < theseWalls.size(); i++){ 
      GameObject a = (Wall) theseWalls.get(i); 

      if(user.returnPosition().equals(a.returnPosition())){ 
       isSomethingThere= true; 
      } else { 
       isSomethingThere= false; 
      } 
     } 
     return isSomethingThere; 
    } 
} 

,使檢查,如果他們碰了壁

和這使得牆壁

public void makeWallWE(double starty, double endy, double x){ 
    double length = endy - starty; 
    for(int i = 1; i<=(int)length;i++){ 

     Wall Wallie= new Wall(); 
     Wallie.setPosition(x,starty+i); 

     Wallie.showPosition(); 

     theseWalls.add(Wallie); 
    } 
} 
+1

你的輸出是什麼樣的? – TastyLemons

+0

您可以用比較x和y值來替換點比較。 –

回答

0

您有:

public Boolean somethingIsThere(GameObject user){ 
    for(int i = 0; i < theseWalls.size(); i++){ 
     GameObject a = (Wall) theseWalls.get(i); 

     if(user.returnPosition().equals(a.returnPosition())){ 
      isSomethingThere= true; 
     } else { 
      isSomethingThere= false; 
     } 
    } 
    return isSomethingThere; 
} 

即使用戶的位置相匹配的城牆之一,您可以繼續通過牆壁其餘檢查,並最終設定isSomethingTherefalse。這是唯一的一次,如果theseWalls的最後一堵牆是匹配的。

當您找到匹配的牆時,您將希望跳出該循環,以避免在列表中稍後檢查不匹配的牆時,將isSomethingThere重置爲false

+0

因此,如果我將它初始化爲false並刪除else語句,我應該很好? – user3337754

+0

當然也可以。在你已經知道結果會是什麼後,儘快打破循環,這樣可以避免繼續進行測試,但這不是必須的 - 這是一種常見的簡單性能優化,我只是本能地在這一點上做的。 –

+0

你如何擺脫循環? – user3337754