2012-04-05 95 views
0

我有函數檢查衝突的問題。無論我做什麼,都會拋出NoSuchElementException。那就是:爲每個循環嵌套的NoSuchElementException

public boolean isColliding(Pixel a) { 
    if((a.x + a.size/2 <= x - size/2 && 
     a.x - a.size/2 >= x - size/2 || 
     a.x + a.size/2 <= x + size/2 && 
      a.x - a.size/2 >= x + size/2) && 
     (a.y + a.size/2 <= y - size/2 && 
     a.y - a.size/2 >= y - size/2 || 
     a.y + a.size/2 <= y + size/2 && 
      a.y - a.size/2 >= y + size/2) 
      ) { return true; } else { return false; } 
} 

這裏是整個代碼:

Main.java

Particle.java

ParticleHandler.java

Pixel.java

+0

爲NoSuchElementException提供錯誤堆棧跟蹤。 – 2012-04-05 10:20:48

+0

'if(a){return true;} else {return false;}'可以簡化爲'return a;'。堆棧跟蹤在哪裏?每個循環在哪裏? – 2012-04-05 10:23:48

+0

在問題本身**中發佈相關代碼**,不要只是鏈接。爲什麼:http://meta.stackexchange.com/questions/118392/add-stack-overfow-faq-entry-or-similar-for-putting-code-in-the-question顯然比你最初引用的幾行引用代碼是相關的。 – 2012-04-05 10:24:32

回答

1

這裏的亞問題(Main.java):

for(Iterator<Pixel> iterator2 = pixel.iterator(); iterator2.hasNext();){ 
    if(iterator != iterator2){ 
     licz.field(iterator2.next()); 
     try{ 
      if(px.isColliding(iterator2.next())) { temporary++; } 
     } catch(Exception e) { } 
    } 
} 

iterator2.next()被稱爲一個循環中沒有hasNext()檢查。

而且這樣的:

if(damnLongCondition) { return true; } else { return false; } 

可以(也應該)被簡化爲:

return damnLongCondition; 
+0

好吧,製作臨時Pixel對象併爲其分配iterator2.next解決了這個問題。感謝幫助。 – JakobekS 2012-04-05 10:31:55

1

你的錯誤很可能來自這裏:

for(Iterator<Pixel> iterator2 = pixel.iterator(); iterator2.hasNext();){ 
if(iterator != iterator2){ 
    licz.field(iterator2.next()); 
try{ 
     if(px.isColliding(iterator2.next())) { temporary++; } 
} catch(Exception e) { } 
} 

要調用iterator2.next ()在循環中第二次沒有驗證它仍然有下一個值。