if语句及if else if语句求解,看源代码绕迷糊了……
mud吧
全部回复
仅看楼主
level 8
xiuliinlove 楼主
mudlib源码中经常有一些if条件判断语句,对于字符串的判断还好说,不存在包含问题。但是对于数字的判断语句我就头大了,数字判断存在包含的问题,经常把我绕得晕头转向,比如i=15,那么i同时满足i<20和i<30,我就弄不清具体是怎么执行的了……
请看下面四个代码片段:
1、if (i<10) x=1;if (i<20) x=2;if (i<30) x=3;
2、if (i<30) x=3;if (i<20) x=2;if (i<10) x=1;
3、if (i<10) x=1;else if (i<20) x=2;else if (i<30) x=3;
4、if (i<30) x=3;else if (i<20) x=2;else if (i<10) x=1;
当i=15时,以上四段代码里的x分别取值多少?
先说下我研究了N长时间后的自己的理解:
1、15<20,x=2;15<30,x=3 最后3覆盖2,x=3
2、15<30,x=3;15<20,x=2 最后2覆盖3,x=2
3、15<20,x=2;后面是else,百度了一下说else前面的执行了就不往后执行了,所以我认为x=2
4、15<30,x=3;后面是else,所以x=3
请教我对上面代码的理解是否有误,求正确指导。
2014年09月05日 05点09分 1
level 15
1对,2结果对但最后一步没覆盖,不满足条件未执行赋值。3对,4按道理来说应该报错。
2014年09月05日 08点09分 2
代码2和代码1一样应该都是顺次往下执行吧。那么代码2就应该也是覆盖。我说的覆盖是i<20的结果覆盖i<30的结果。代码2里最后一句是i<10条件不满足不执行我是知道的。
2014年09月05日 11点09分
level 15
可以这样理解
if(条件1)执行1;
else if(条件2)执行2;
else if(条件3)执行3;
……
else 执行n;
第2行就相当于if(条件1取反&&条件2)执行2;
第3行就相当于if(条件2取反&&条件3)执行3;
依此类推,最后一行就相当于:
if(条件(n-1)取反)执行n;
2014年09月05日 08点09分 3
非常感谢解答。尤其是关于else的讲解的太到位了![真棒]
2014年09月05日 11点09分
你好。请问类似下面这样的if语句(combatd里控制伤害描述的):if (damage<10) {returen a};if (damage<30) {returen b};if (damage<50) {returen c}; 如果damage=20,返回的是b还是c?是不是本来if语句是顺次执行,但一旦return了就没后面什么事儿了?
2014年09月11日 08点09分
回复 xiuliinlove :是b,return就已经完成该函数的执行了。
2014年09月11日 14点09分
level 1
不知道这个问题解答了没有。其实很简单的问题。1和2是3条指令。3和4只有1条指令。
1、if (i<10) x=1;
if (i<20) x=2;
if (i<30) x=3;
2、if (i<30) x=3;
if (i<20) x=2;
if (i<10) x=1;
3、3.1 if (i<10) x=1
3.2 else if (i<20) x=2
3.3 else if (i<30) x=3
4、4.1 if (i<30) x=3
4.2 else if (i<20) x=2
4.3 else if (i<10) x=3
后两条按照顺序检查条件。3.1 -> 3.2 -> 3.3 如果任何条件符合,那么下面的就不检查了。比如3.2如果符合条件那么3.3就不会再去检查了。到此为止。
设 i = 50
5.1 if (i>10) x = 1
5.2 else if (i>20) x = 2
5.3 else if (i>30) x = 3
先检查5.1的条件因为 50 > 10,条件符合, 设x=1.这个指令到此为止。即使i>20和i>30也符合条件也没用。
2018年01月12日 01点01分 4
level 12
我想知道,楼下怎么看?
2018年01月17日 21点01分 5
level 5
怎么看源代码啊?
2021年05月28日 08点05分 6
用记事本之类打开就行,word也行,只是一个纯文本
2021年05月29日 01点05分
1