黑马程序员技术交流社区

标题: 今天复习时发现的一个问题,请大家指教 [打印本页]

作者: 王彦伟    时间: 2012-12-12 11:42
标题: 今天复习时发现的一个问题,请大家指教
今天复习到分支结构,if-else if和switch-case,前者可用于范围的判断,后者一般用于定制的比较判断。其他还有什么区别和余姚注意的地方吗?

作者: 黄新    时间: 2012-12-12 12:00
if 声明需要二进制的表达式, (比如后面是个整形变量就会失败)switch声明永远不会失败,  注意的地方:每个case 后面不要忘了写break;
作者: netboy032    时间: 2012-12-12 12:10
switch语句中选择的类型(括号中的类型)只有四种:byte、short、int、char。别忘了写default语句
作者: rla540    时间: 2012-12-12 14:08
本帖最后由 rla540 于 2012-12-12 14:10 编辑

除了语法上switch和if else if不同之外,这两者之间到底有什么区别呢
1:switch语句 当case中的语句块有3条以下时,也就是分支在3条或3条以下。if else if的处理方案是分别进行比较,得到选择的分支,并跳转到指定语句中去执行相关代码。此时switch case语句的实现方式也是基本一样的。

2:当switch语句中有三条以上case块时,也是一条一条比较么?如果很多呢!那岂不是很不效率? 因为case中比较的都是一些准确的值,所以可以这样来实现:当用户输入一个数值时。首先判断这个值是不是比case中最大的大。如果比最大的大,那么直接跳到default语句中(如果有default的话)否则直接跳出switch; 如果比最小得还小呢,同样道理。case语句的代码都会放到一块连接的空间中。switch会生成一个存储着每个语句块地址的数组。匹配好后就会通过这个数组中的地址跳转到相应的语句块中去执行,直到遇到break语句。

3:如果case值复杂而没有规律怎么办呢?这就看编译器作者的数学功底如何了,如何来最大化优化这种匹配!具体实现细节很复杂。如果想深入研究得话,你要学习一下汇编语言(当然数学也要不错)!来分别查看不同条件下switch case反汇编代码有何异同!
作者: 邵帅    时间: 2012-12-12 14:59
if-else if和switch-case,基本上switch-case能实现的if-else if都能实现,但是有的时候if-else if写出的代码会比switch-case多好多,所以有的时候,尤其是比较固定的判断时候用switch-case,需要注意的是switch-case需要break,新手总爱丢这个,switch-case有个小窍门,就是当前几个输出是一样的时候可以就写一个,例如说
switch(i)
{ case1:
case2:
case3:
console.writeling("你好");
break;
case4:
.....
}
这就是说当输入1,2,3的结果时都输出那句话。
当有的时候,条件无法确定的输入时,就不能用switch-case实现了,用if就简单了。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2