A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

今天复习到分支结构,if-else if和switch-case,前者可用于范围的判断,后者一般用于定制的比较判断。其他还有什么区别和余姚注意的地方吗?

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

4 个回复

正序浏览
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就简单了。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 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反汇编代码有何异同!

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
switch语句中选择的类型(括号中的类型)只有四种:byte、short、int、char。别忘了写default语句

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
if 声明需要二进制的表达式, (比如后面是个整形变量就会失败)switch声明永远不会失败,  注意的地方:每个case 后面不要忘了写break;

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马