2013-11-23 142 views
-2
Point bl = new Point(Guy.x, Guy.y + Guy.height); 
Point br = new Point(Guy.x + Guy.width, Guy.y + Guy.height); 

for(Tile p: platforms){ 
      if (p.y == br.y && br.x >= p.x && bl.x <= p.x + p.width) { 
       isOnPlatform = true; 
      }else{ 
       isOnPlatform = false; 
      } 

    } 

當我運行那段代碼時,控制檯顯示「NullPointerException」。爲什麼這不起作用?Java「foreach」無法正常工作... nullPointerException

我已經定義/初始化變量Tile[] platforms。另外,當我運行它時,Guy不會下降。

而且,我這樣做的時候,它的工作原理:

//for(Tile p: platforms){ 
    if (platforms[1].y == br.y && br.x >= platforms[1].x && bl.x <= platforms[1].x + platforms[1].width) { 
       isOnPlatform = true; 
      }else{ 
       isOnPlatform = false; 
      } 

// } 

但是,我還有其他2 platforms,我會添加像20多。我不想這樣做,每個platforms

有什麼想法?

+2

_What是「NullPointerException」_...至少要付出一些努力。 –

+0

NullPointerException發生在哪裏(行號)?你可以在堆棧跟蹤中看到它。 –

+0

檢查您的平臺[0]元素 –

回答

3

foreach循環遍歷所有元素(包括null),所以如果您有平臺數組的長度,例如10,只有2個元素裏面,然後PY將導致NPE(空指針異常),因爲P是空當指數== 2.你必須改變你的代碼以避免循環的空元素:

for (Tile p : platforms) { 
    if (p == null) { 
    continue; // or break, whatever is better in your case 
    } 
    if (p.y == br.y && br.x >= p.x && bl.x <= p.x + p.width) { 
    // ... 
    } 
}