在我的程序中,我有一系列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语句被跳过,好像它是假的。我觉得我错过了一些非常明显的东西。有什么想法吗?
答案 0 :(得分:1)
我不确定,但我认为演员没有像你期望的那样工作..你可以尝试第一个,然后是其他人吗?
((int)([currentTouch locationInView:self].y/16))<([player y]-1))
答案 1 :(得分: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;
}
答案 2 :(得分:0)
为什么不通过在顶部的if之外进行转换来更容易阅读。最终减少代码: - )
答案 3 :(得分: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;
}
您确定currentTouch
和player y
是有效号码吗?我有一段时间没有触及任何iPhone开发人员,所以我不确定它是否会引起关注,但这是第一个让人想到在所有3个条件下滑落的事情。