if-else语句没有执行?
问题描述:
在我的节目,我有一系列的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语句被忽略,就好像它是假的。我感觉我好像错过了一些显而易见的事情。有任何想法吗?
答
您缺少一些括号。我把它改写这样的:
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
答
我不确定,但我认为演员阵容并没有像你期望的那样工作..你可以为第一个和其他人尝试这个吗?
((int)([currentTouch locationInView:self].y/16))<([player y]-1))
答
为什么不通过在顶部以外进行铸造来读取它更容易。最终代码较少:-)
答
正如其他人所说,你可以让你的代码更容易一点保持如果你让投一次。如果您确实知道您需要这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;
}
你肯定currentTouch
和player y
是有效的号码?我在一段时间内没有碰过任何iPhone开发者,所以我不确定这是否是一个问题,但这是首先想到的事情滑倒了所有3个条件。
与您的问题无关,但您应该只调用一次这些方法,并将结果存储在局部变量中以进行比较。 – Thilo
您检查您尝试的条件是否属实。 – rptwsthi