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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵崇友 中级黑马   /  2013-3-30 17:06  /  1689 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 赵崇友 于 2013-3-30 17:22 编辑

class Demo
{
public static void main(String[] args)
{
show(0);
show(1);
}
public static void show(int i)
{
switch(i)
{
default:
i+=2;
case 1:
i+=1;
case 4:
i+=8;
case 2:
i+=4;
}
System.out.println("i="+i);
}
}



运行结果是:
15
14

求具体的执行流程。

7 个回复

倒序浏览
首先产生这个结果的原因是  各个case项后都没有家break;

当你传入0时,没有对应case项,所以从default开始  一直往下执行;

default:
i+=2;   // i = 2;
case 1:
i+=1;   //  i = 3 ;
case 4:
i+=8; // i = 11;
case 2:
i+=4;  // i =15;

然后到打印语句 ,输出i的值为15;
传入1时,从case 1:开始依次向下执行,即最后结果14;


回复 使用道具 举报
黑马伍哲沂 发表于 2013-3-30 17:19
首先产生这个结果的原因是  各个case项后都没有家break;

当你传入0时,没有对应case项,所以从default开 ...

哦哦,原来如此 ,多些了!!没有符合的case就从default执行啊。。
回复 使用道具 举报
   show(0);因为i=0,所以从default开始计算,
  default:
i+=2; -----------------i=0+2=2
case 1:
i+=1;-------------------i=3;
case 4:
i+=8; ------------------i=11;
case 2:
i+=4;------------------i=15;
加到最后结果:i=15;

   show(1); 因为i=1,所以从case开始运行.
case 1:
i+=1;  ----------------i=2;         
case 4:
i+=8; -----------------i=10;
case 2:
i+=4;------------------i=14;
第二个结果是:i=14;
回复 使用道具 举报
本帖最后由 续圆凯 于 2013-3-30 17:27 编辑

在show(0)中 当执行到i=0的时候,下面的case没有对应的值,所以会从上往下执行。
即: i+=2;
      i+=1;
      i+=8;
      i+=4;
   最后输出i的值。15

在show(1)中 当执行到i=1的时候, 找到了下面的case 1. 所以会跳过default 往下执行。
即: i+=1;
      i+=8;
      i+=4;
   最后输出i的值。 14

回复 使用道具 举报
  1. class java0330d2
  2. {
  3. public static void main(String[] args)//主函数
  4. {
  5. show(0);
  6. show(1);
  7. }
  8. public static void show(int i)//没有返回值的函数名为show,有一个int类型的变量i参与运算。
  9. {
  10. switch(i)//这一段是选择语句
  11. {
  12. default://下列结果都不对就运行这一语句
  13. i+=2;
  14. case 1://结果1
  15. i+=1;
  16. case 4://结果2
  17. i+=8;
  18. case 2://结果3
  19. i+=4;
  20. }
  21. System.out.println("i="+i);//输出语句。
  22. }
  23. }

  24. //这段代码没写跳出语句break, 所以他把所有的结果加了一遍  结果一个是15 一个是14
复制代码
你看看是这意思不
回复 使用道具 举报
万蕾 中级黑马 2013-3-30 17:28:44
7#
在主函数中将0放入静态方法show中,而show中方法是switch语句,其会先判断case上的取值是否与0匹配,如果不匹配则从default开始执行,又因为执行语句后没有用break结束循环,则show(0)会先执行defaut中的执行语句并依次执行每个case中的语句。而show(1)则会从case 1中的执行语句开始,一次往下执行剩余case的执行语句。
回复 使用道具 举报
正解么{:soso_e179:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马