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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 于世德 中级黑马   /  2013-7-15 16:24  /  1376 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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方法的输出结果?

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 淡定

查看全部评分

8 个回复

倒序浏览
show(0); 直接匹配了default: 而没有break,并且而其后的所有case:都没有break,所以会一直顺序执行。而show(1)则case 1: 并且没有break ,也是会顺序执行其后的所有case:语句。
回复 使用道具 举报
show(0); 直接匹配了default: 而没有break,并且而其后的所有case:都没有break,所以会一真顺序执行。而show(1)则case 1: 并且没有break ,也是会顺序执行其后的所有case:语句。
回复 使用道具 举报
所以show(0)=0+2+1+8+4=15;而show(1)=1+1+8+4=14;

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 同一个楼层可以编辑的

查看全部评分

回复 使用道具 举报
当 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

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 赞一个!

查看全部评分

回复 使用道具 举报
没有break,
i=0时,执行i+=2;i+=1;i+=8; i+=4;
输出的是15
i=1时,执行i+=1;i+=8; i+=4;
输出的是14

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 赞一个!

查看全部评分

回复 使用道具 举报
肥猫 中级黑马 2013-7-15 22:21:31
7#
本帖最后由 肥猫 于 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;

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 肥猫要冲高级了,哈哈

查看全部评分

回复 使用道具 举报
你写的程序中switch----case语句中没有break所以i的值是直接累加的
回复 使用道具 举报
教皇 高级黑马 2013-7-16 20:02:28
9#
没有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
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马