没有if-else语句执行?

时间:2011-08-21 08:14:23

标签: iphone objective-c if-statement

在我的程序中,我有一系列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语句被跳过,好像它是假的。我觉得我错过了一些非常明显的东西。有什么想法吗?

4 个答案:

答案 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;
}

您确定currentTouchplayer y是有效号码吗?我有一段时间没有触及任何iPhone开发人员,所以我不确定它是否会引起关注,但这是第一个让人想到在所有3个条件下滑落的事情。