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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 秋天-10 中级黑马   /  2015-4-28 15:08  /  714 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. 写出输出结果。
  2. class Demo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 show(0);//15
  7.                 show(1);//14
  8.         }       
  9.         public static void show(int i)
  10.         {
  11.                 switch(i)
  12.                 {       
  13.                         default:
  14.                                 i+=2;
  15.                         case 1:
  16.                                 i+=1;
  17.                         case 4:
  18.                                 i+=8;                       
  19.                         case 2:
  20.                                 i+=4;
  21.                 }
  22.                 System.out.println("i="+i);
  23.         }       
  24. }
复制代码

输出结果为:15,14,但是不太明白?还请解答

15 个回复

倒序浏览
show(0),寻找符合case值的语句执行,因为没有符合的case所以从default开始执行,default执行完后,因为没有读取到break或大括号switch不会结束,所以继续向下执行,直到遇到大括号。show(1),因为有符合的case,从符合的case开始执行,执行到大括号结束。switch语句,结束的两种方法,要么遇到break,要么遇到大括号。
回复 使用道具 举报
default,是默认语句,当没有与case相匹配的条件时,就执行default。程序会先找与case相匹配的条件。所以default的摆放顺序可以任意。
回复 使用道具 举报 1 0
default的循序可以任意摆放,会先执行case
回复 使用道具 举报
当default ,没有break,其下还有case语句就顺序执行。case也没有break,那么顺序执行到程序结尾。show(0)没有对应的case条件,所以从default执行到结尾,结果为15.show(1),可以找到与之匹配的case,从case1执行,因为没有break,所以执行到结尾,结果为14.
回复 使用道具 举报
没有符合case,没有break  ,读到default  然后把defalut后面的执行语句全执行一遍到大括号,有符合case没有break  从符合case执行语句到大括号结束~!
回复 使用道具 举报
case没有匹配的值时,会执行default。而case中没有break时,就按顺序执行语句,不再判断case。
回复 使用道具 举报
wangyu 中级黑马 2015-4-28 21:18:19
8#
看楼上就可以了
回复 使用道具 举报
今天刚学的,好像知道也
回复 使用道具 举报
andre 中级黑马 2015-4-28 21:34:32
10#
i=0的时候 default,case1,case4 ,case2都要执行,直到遇到大括号才结束,因为没break
i=1的时候 case1,case4 ,case2都要执行,直到遇到大括号才结束,因为没break
回复 使用道具 举报
不错不错
回复 使用道具 举报
396460221 发表于 2015-4-28 15:38
show(0),寻找符合case值的语句执行,因为没有符合的case所以从default开始执行,default执行完后,因为没有 ...

default语句应该是最后才执行,如果没有匹配除他之外的所有选项的话。
回复 使用道具 举报
你的case没有break语句,default与顺序无关,程序会先找到case1入口,你输入0,结果case4与case2都不会执行,然后跳到default,执行i+=2,因为没有break语句,所以接着执行case1,case4,case2,然后遇见大括号,跳出Switch。
回复 使用道具 举报
i=15 i=14   当为0时,从default开始执行0+2+1+8+4=15  ;当为1时,从case 1:开始执行,1+1+8+4=14
回复 使用道具 举报
没有break case的穿透效果
回复 使用道具 举报
你可以自己debug一下 看一下结果就可以了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马