黑马程序员技术交流社区

标题: 大家帮忙看看这个程序 [打印本页]

作者: 赵崇友    时间: 2013-3-30 17:06
标题: 大家帮忙看看这个程序
本帖最后由 赵崇友 于 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

求具体的执行流程。

作者: 黑马伍哲沂    时间: 2013-3-30 17:19
首先产生这个结果的原因是  各个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:21
黑马伍哲沂 发表于 2013-3-30 17:19
首先产生这个结果的原因是  各个case项后都没有家break;

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

哦哦,原来如此 ,多些了!!没有符合的case就从default执行啊。。
作者: _王涛    时间: 2013-3-30 17:21
   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:24
本帖最后由 续圆凯 于 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


作者: 邵震    时间: 2013-3-30 17:28
  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
在主函数中将0放入静态方法show中,而show中方法是switch语句,其会先判断case上的取值是否与0匹配,如果不匹配则从default开始执行,又因为执行语句后没有用break结束循环,则show(0)会先执行defaut中的执行语句并依次执行每个case中的语句。而show(1)则会从case 1中的执行语句开始,一次往下执行剩余case的执行语句。
作者: guobin_lu    时间: 2013-3-30 18:56
正解么{:soso_e179:}




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