黑马程序员技术交流社区

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

作者: 于世德    时间: 2013-7-15 16:24
标题: switch语句的问题
  1. class Demo
  2. {
  3. public static void main(String[] args)
  4. {
  5. show(0);//15
  6. show(1);//14
  7. }
  8. public static void show(int i)
  9. {
  10. switch(i)
  11. {
  12. default:
  13. i+=2;
  14. case 1:
  15. i+=1;
  16. case 4:
  17. i+=8;
  18. case 2:
  19. i+=4;
  20. }
  21. System.out.println("i="+i);
  22. }
  23. }
复制代码
谁来帮忙分析一下2个show方法的输出结果?

作者: wedge    时间: 2013-7-15 17:16
show(0); 直接匹配了default: 而没有break,并且而其后的所有case:都没有break,所以会一直顺序执行。而show(1)则case 1: 并且没有break ,也是会顺序执行其后的所有case:语句。
作者: wedge    时间: 2013-7-15 17:17
show(0); 直接匹配了default: 而没有break,并且而其后的所有case:都没有break,所以会一真顺序执行。而show(1)则case 1: 并且没有break ,也是会顺序执行其后的所有case:语句。
作者: wedge    时间: 2013-7-15 17:18
所以show(0)=0+2+1+8+4=15;而show(1)=1+1+8+4=14;
作者: 胡志翔    时间: 2013-7-15 17:24
当 i=0时,选择值里面没有0,程序从default执行,因为没有语句break语句来跳出switch语句,所以要顺序执行完switch里的所有语句,即i=0+2+1+8+4=15
当 i=1时,选择值里面有1,程序从case 1执行,因为没有语句break语句来跳出switch语句,所以要顺序执行完switch里的所有语句,即i=1+1+8+4=14
作者: 李健09    时间: 2013-7-15 22:10
没有break,
i=0时,执行i+=2;i+=1;i+=8; i+=4;
输出的是15
i=1时,执行i+=1;i+=8; i+=4;
输出的是14
作者: 肥猫    时间: 2013-7-15 22:21
本帖最后由 肥猫 于 2013-7-15 22:29 编辑

show(0)你先别管DEFAULT的位置,无视他,DEFAULT总是在最后没有匹配值才执行或者找到匹配直接BREAK不执行,所以SHOW(0)就从CASE1加下来1+8+4+2=15;
shou(1)从一开始匹配,没有BREAK就这么加1+1+8+4=14;

作者: hou604720966    时间: 2013-7-16 17:41
你写的程序中switch----case语句中没有break所以i的值是直接累加的
作者: 教皇    时间: 2013-7-16 20:02
没有break语句,所以会顺序执行下去,show(0)执行执i+=2;i+=1;i+=8; i+=4;得出i=15
当show(1)时,从case1开始执行,没有break,则执行i=1时,执行i+=1;i+=8; i+=4;得出i=14




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