2013-11-23 227 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) { 
    // ... 
    } 
}