黑马程序员技术交流社区

标题: switch 语句的疑问 [打印本页]

作者: liqian    时间: 2012-4-25 09:04
标题: switch 语句的疑问
switch语句和if语句有很相似的地方,那么可以用switch的分支语句替代if条件语句么?
另外switch的分支语句有可能会出现串联,怎么去防止这样的情况的发生?
作者: 刘永菲    时间: 2012-4-25 09:12
switch关键字的中文意思是开关、转换的意思,switch语句在条件语句中特别适合做一组变量相等的判断,在结构上比if语句要清晰很多。
switch语句不是很适合进行区间的判别,更多的区间判别一般还是使用if-else if-else语句进行实现。
总结:if语句可以实现程序中所有的条件,switch语句特别适合一系列点相等的判别,结构显得比较清晰,而且执行速度比if语句要稍微快一些,在实际的代码中,可以根据需要来使用对应的语句实现程序要求的逻辑功能。

作者: 毕博    时间: 2012-4-25 09:24
如果你的条件判断非常多,你用if...elseif...else这样的判断,代码将变得很难阅读。而如果使用switch,则变得简单易懂。如果只有很少的几个条件判断,则没什么区别了(当然其语法上是有些区别的)  
  if语句在用分支的时候,自由性大点,条件 可以写一个范围也可也是一个表达式
而switch则是一些应用比较中规中矩的类型。然而在一些判断中则可以互相替代之。
如成绩(score)90分以上的输出a
          80分以上的输出b
          70发以上的输出c
          60分以上的输出d
         其它则为e
用if则为:
if(score>90)
      printf("a");
else if(score>80)
      printf("b");
else if(score>70)
      printf("c");
else if(score>60)
      printf("d");
else
      printf("e");

int temp = (int)(score/10);
switch(score){
      case 9:printf("a");break;
      case 8:printf("b");break;
      case 7:printf("c");break;
      case 6:printf("d");break;
     default:printf("e");

作者: 张成龙    时间: 2012-4-25 09:25
if语句的使用范围更广一些。
如果判断的具体数值不多,而是符合byte 、short 、int、 char这四种类型。使用switch语句比使用if语句效率要高;
对区间判断,对结果为boolean类型判断,使用if语句。
作者: 孙天    时间: 2012-4-25 10:41
首先只有四种数据可以供switch选择:
byte,short,int,char
1,判断
        代表语句:if语句的三种格式,第二种格式的简写格式。格式是固定的,要求记住。
        注:
           a,每一种格式都是单条语句。
           b,第二种格式与简写格式的区别:简写格式运算完要有值出现。好处是可以写在其他表达式中。
           c,条件表达式无论写成什么样子,只看最终的结构是否是true 或者 false;
2,选择
        代表语句:switch语句。
        注:
           a,switch语句选择的类型只有四种:byte,short,int char。
           b,case之间与default没有顺序。先执行第一个case,没有匹配的case执行default。
           c,结束switch语句的两种情况:遇到break;执行到switch语句结束。
           d,如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运行可以运行执行语句。
             直到遇到break或者switch结尾结束。
作者: 周海诚    时间: 2012-4-25 11:00
你先要知道if语句和switch语句的区别
if语句和switch语句可以从使用的效率上来进行区别,也可以从实用性角度来区分。如果从使用的效率上进行区分,在对同一个变量的不同值作条件判断时,可以用switch语句与if语句,使用switch语句的效率相对更高一些,尤其是判断的分支越多越明显。
如果从语句的实用性的角度去区分,那switch语句肯定不如if条件语句。if条件语句是应用最广泛和最实用的语句。
然后才是答题技巧:
在程序开发的过程中,具体如何来使用if和switch语句根据实际的情况而定,尽量做到物尽其用,不要因为switch语句的效率高就一味的使用,也不要因为if语句常用就不应用switch语句。要根据实际的情况,具体问题具体分析,使用最适合的条件语句。
一般情况下对于判断条件较少的可以使用if条件语句,但是在实现一些多条件的判断中,就应该使用switch语句。
作者: 陈忠    时间: 2012-4-25 11:43
首先 应该要了解,switch(表达式),其中表达式的值一般为整型int,能够自动进行饮试转换成int型的表达式byte,short,char,或者是final型的变量。(也曾经在张老师的‘交通灯管理系统’中用过枚举类型)。
而if(表达式)表达式中的是一个boolean类型。
  当然,switch在某特定的条件下和if语句是可以互换使用的。
如if(a==1)...else if(b==3)......   

  那用switch表示为:switch (a) {
        case 1:
                break;
        case 3:
}

但由于if中的每条语句都是独立的,这时a的值就要进行多次寄存。而switch中,他一开始就知道你要比 a,于是 a 一次性读取,相比 if 节约了很多开销。所以效率就要比if语句要高的多
最后,在使用switch中要注意穿透问题,特别要注意在每次case语句中都要加入一个break就可以了。
作者: 陈忠    时间: 2012-4-25 11:43
首先 应该要了解,switch(表达式),其中表达式的值一般为整型int,能够自动进行饮试转换成int型的表达式byte,short,char,或者是final型的变量。(也曾经在张老师的‘交通灯管理系统’中用过枚举类型)。
而if(表达式)表达式中的是一个boolean类型。
  当然,switch在某特定的条件下和if语句是可以互换使用的。
如if(a==1)...else if(b==3)......   

  那用switch表示为:switch (a) {
        case 1:
                break;
        case 3:
}

但由于if中的每条语句都是独立的,这时a的值就要进行多次寄存。而switch中,他一开始就知道你要比 a,于是 a 一次性读取,相比 if 节约了很多开销。所以效率就要比if语句要高的多
最后,在使用switch中要注意穿透问题,特别要注意在每次case语句中都要加入一个break就可以了。




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