你如何正确地构建案例陈述?

时间:2014-10-28 01:12:02

标签: ios objective-c switch-statement

我对编程比较陌生,我想知道如何正确构建案例陈述。我的case语句似乎只调用一个语句,特别是唯一一个包含代码的语句。我为一部分人工智能调用一个随机数来做决策。但是,当生成数字时,它似乎只调用一个语句,这是唯一一个包含代码的语句。提前谢谢。

NSInteger decisionMaking = arc4random() % 3;

switch (decisionMaking) {

        case 1:

        break;

    case 2:
      self._opponent.physicsBody.velocity = CGVectorMake(300, 10);
        [self._opponent.physicsBody applyImpulse:CGVectorMake(10, 100)];
        break;

        default:
        break;

3 个答案:

答案 0 :(得分:0)

Switch语句在功能上等同于if / else if / else if / else if语句链,但是当存在多个其他情况时效率更高,因为编译器可以生成代码,以更少的比较来决定执行哪种情况。

由于您的其他每个case语句都是空中断,因此它们什么都不做。将案例设置为1是没有意义的。默认情况下将处理没有案例覆盖它们的任何值。

如果你有可能的值没有处理但是没有default:语句,编译器会抱怨,但这只是为了确保你没有遗忘。

如果你有一个只有一个“活动”情况的switch语句(一个代码实际上做任何事情的情况),那么使用switch语句没什么意义。执行的代码量可能大致相同,但单个if更容易阅读:

NSInteger decisionMaking = arc4random() % 3;

if (decisionMaking == 2)
{
  //do stuff
}

这在功能上等同于您的代码,但更易于阅读。

如果你想做一些不同的事情,如果decisionMaking不等于2,你可以改变它:

NSInteger decisionMaking = arc4random() % 3;

if (decisionMaking == 2)
{
  //do stuff
}
else
{
  //do other stuff - same as the "default:" case in the switch statement.
}

只有当你达到3种或更多可能性时才会有一个switch语句才有意义。

答案 1 :(得分:0)

根据您的评论,您不需要case语句,只需要一个概率,例如

if (arc4random() % 3 == 0)  // one third chance (approx, that's another issue)
    dodge();

答案 2 :(得分:0)

我明白了!我认为程序中有一些不起作用的东西,比如NSLog没有打印,所以我在xcode 6中创建了一个新项目。所以,我正在使用NSLog并注意到当我测试case语句时,打印了60个东西。然后我意识到这是因为它在更新方法中调用方法执行了60次case语句!所以,我意识到这就是为什么似乎每件事都发生了。所以我修好了,现在很好。谢谢大家的帮助!