2012-11-28 94 views
-6
public Boolean DetectPlayerAndGround1Collision2(/*snip*/) 
{    
    if (/*snip*/) 
    { 
     if (/*snip*/) { return true; } 
     else if (/*snip*/) { return true; } 
     else if ((/*snip*/) { return true; } 
    } 
} 
+2

-1。缺少問題......以及錯誤信息中不清楚的解釋。 –

+0

@AlexeiLevenkov FYI:標題中的解釋。 – JohnLBevan

+0

@JohnLBevan這不是一個解釋,它只是說明錯誤信息是什麼。 – Servy

回答

2

沒有一個else作爲一個包羅了所有剩餘的情況下,你需要添加一個return false;下你的邏輯檢查。

public Boolean DetectPlayerAndGround1Collision2(/*snip*/) 
{    
    if (/*snip*/) 
    { 
     if (/*snip*/) { return true; } 
     else if (/*snip*/) { return true; } 
     else if (/*snip*/) { return true; } 
    } 
    return false; 
} 
+0

DAFUQ im對不起,也許是因爲我在很高的時間以前就把它影響到了我的腦海裏:D rly Weed = Stupidity –

5

您未能在其他情況下,返回值:

public Boolean DetectPlayerAndGround1Collision2(/*snip*/) 
{    
    if (/*snip*/) 
    { 
     if (/*snip*/) { return true; } 
     else if (/*snip*/) { return true; } 
     else if ((/*snip*/) { return true; } 
     else{return false;} 
    } 
    else 
    { 
     return false; 
    } 
} 
+1

如果這個解決方案通過了外部'if'評估並且隨後失敗了內部條件,它將不起作用。 – bporter

+0

你是絕對正確的。編輯... –

2

你是不是經常返回值:

if (playerPositionM.Y <= groundPositionM.Y + groundM.Height && playerPositionM.Y > groundPositionM.Y) 
    { 
     if (playerPositionM.X < groundPositionM.X && (playerPositionM.X + playerM.Width < groundPositionM.X + groundM.Width && playerPositionM.X + playerM.Width > groundPositionM.X)) 
     { 
      return true; 
     } 
     else if (playerPositionM.X + playerM.Width > groundPositionM.X + groundM.Width && (playerPositionM.X < groundPositionM.X + groundM.Width && playerPositionM.X > groundPositionM.X)) 
     { 
      return true; 
     } 
     else if ((playerPositionM.X > groundPositionM.X && playerPositionM.X < groundPositionM.X + groundM.Width) && (playerPositionM.X + playerM.Width < groundPositionM.X + groundM.Width && playerPositionM.X + playerM.Width > groundPositionM.X)) 
     { 
      return true; 
     } 
     else 
     { 
      // You need to return a value here: 
     } 
    } 
    else 
    { 
     // You need to return a value here: 
    } 

etc! 
3

我建議你做以下幾點:

public Boolean DetectPlayerAndGround1Collision2(/*snip*/) 
{ 
    bool result = false;    
    if (/*snip*/) 
    { 
     if (/*snip*/) { result = true; } 
     else if (/*snip*/) { result = true; } 
     else if (/*snip*/) { result =true; } 
    } 
    return result; 
} 

擁有單一返回狀態nt可以更簡單地跟蹤正在發生的事情,並確保它不在任何條件語句中,並在聲明時進行初始化,以確保始終返回值。

+1

這個問題實際上源於另一個問題,這正是我所說的。乾杯。 –

+1

我建議*反對*這樣做。如果檢查一個條件的結果不需要檢查其他條件,並且您的方法沒有其他任何操作,則從方法返回!我不同意「單點回報」的觀點。 –

+1

@DanielMann同意有時候多重回報可能會更好。對於我而言,在上述情況下,您不會在原始代碼上添加任何開銷,但比添加其他else語句更加簡潔。最後一個單一的回報錯誤與上述一樣直截了當,但對於我(純粹的個人偏好),上述情況更爲清楚。 – JohnLBevan

3

以下:

if (A) 
{ 
    if (B) { return true; } 
    else if (C) { return true; } 
    else if (D) { return true; } 
} 

相當於:(假設任何情況下先前沒有返回暗示返回false任何值)

return A && (B || C || D); 

+0

這是一個很酷的解決方案。 –

相關問題