我对编程比较陌生,我想知道如何正确构建案例陈述。我的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;
答案 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语句!所以,我意识到这就是为什么似乎每件事都发生了。所以我修好了,现在很好。谢谢大家的帮助!