2011-08-21 135 views
0

在我的節目,我有一系列的if-else語句看起來像這樣:if-else語句沒有執行?

if ((int)([currentTouch locationInView:self].y/16)<[player y]-1) { 
     direction = 1; 
    } 
    else if ((int)([currentTouch locationInView:self].y/16)>=[player y]-1 && (int)([currentTouch locationInView:self].y/16)<=[player y]+1) { 
     direction = 0; 
    } 
    else if ((int)([currentTouch locationInView:self].y/16)>([player y]+1)) { 
     direction = -1; 
    } 

盡我所知,這些應該是隻有三種選擇,卻沒有一個人被評估爲真。我在運行時設置了一個斷點,並比較了兩個值,第一個大於第二個。然而,第三個if語句被忽略,就好像它是假的。我感覺我好像錯過了一些顯而易見的事情。有任何想法嗎?

+1

與您的問題無關,但您應該只調用一次這些方法,並將結果存儲在局部變量中以進行比較。 – Thilo

+0

您檢查您嘗試的條件是否屬實。 – rptwsthi

回答

1

您缺少一些括號。我把它改寫這樣的:

int y16 = [currentTouch locationInView:self].y/16.0f; 
if (y16 < ([player y]-1)) { 
    direction = 1; 
} 
else if ((y16 >=([player y]-1)) && (y16 <= ([player y]+1))) { 
    direction = 0; 
} 
else if (y16 > ([player y]+1)) { 
    direction = -1; 
} 

甚至

int y16 = [currentTouch locationInView:self].y/16.0f; 
if (y16 < ([player y]-1)) { 
    direction = 1; 
} 
else if ((y16 >=([player y]-1)) && (y16 <= ([player y]+1))) { 
    direction = 0; 
} 
else { 
    direction = -1; 
} 
+0

不是直接的解決方案,但事實證明,我沒有包含正確的標題,所以它以某種方式調用了錯誤的方法。這樣清理起來就更加明顯了。謝謝! – Jumhyn

1

我不確定,但我認爲演員陣容並沒有像你期望的那樣工作..你可以爲第一個和其他人嘗試這個嗎?

((int)([currentTouch locationInView:self].y/16))<([player y]-1)) 
0

爲什麼不通過在頂部以外進行鑄造來讀取它更容易。最終代碼較少:-)

0

正如其他人所說,你可以讓你的代碼更容易一點保持如果你讓投一次。如果您確實知道您需要這3個結果並且只有這3個結果,您還可以更改您的if...elseif聲明。

事情是這樣的......

if (currentY < lowerBound) { 
    direction = 1; 
}else if (currentY > upperBound) { 
    direction = -1; 
}else{ //no need to do 'else if' here because it already failed our other 2 conditions 
    direction = 0; 
} 

你肯定currentTouchplayer y是有效的號碼?我在一段時間內沒有碰過任何iPhone開發者,所以我不確定這是否是一個問題,但這是首先想到的事情滑倒了所有3個條件。