黑马程序员技术交流社区

标题: 这个谁能给解释一下 [打印本页]

作者: 李红志    时间: 2013-3-5 13:56
标题: 这个谁能给解释一下
public class Cases{
     public static void main(String[] arguments){
      float x=9;
      float y=5;   
      int z=(int)(x/y);
      switch(z){
      case 1:
               x=x+2;
      case 2:
               x=x+3;
      default:
               x=x+1;
      }
     System.out.println("Value of X:"+x);
     }
}

当X被显示时,其值是多少?
我认为应该是3或者7,可是答案不是,怎么回事啊
作者: 梁耀今    时间: 2013-3-5 14:09
本帖最后由 说好了丶然后呢 于 2013-3-5 14:12 编辑

因为你这里是没有退出,你没有添加break;int z =(int)(x/y);你这里Z是等于1,所以SWITCH语句是从头到尾执行过,所以答案是等于15;

正确写法:

public class Cases{
     public static void main(String[] arguments){
      float x=9;
      float y=5;   
      int z=(int)(x/y);
      switch(z){
      case 1:
               x=x+2;
               break;
      case 2:
               x=x+3;
               break;
      default:
               x=x+1;
               break;
      }
     System.out.println("Value of X:"+x);
     }
}

作者: 唐长智    时间: 2013-3-5 14:13
你如果不写break;跳出循环的话,那3个赋值运算会一直运行下去的最后结果就是 x+2+3+1等于15.
如果写了break;跳出的话,值就等于11
作者: BitmapFactory    时间: 2013-3-5 14:15
结束switch语句的两种情况:遇到break,执行到switch语句结束
如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运行可以执行的语句,直到遇到break或者switch结尾结束.
case之间与default没有顺序,先执行第一个case,没有匹配的case执行default
由于没有break且case =1( z=1)所以从switch语句由上向下执行,由于找到了case所以不执行default
所以最后打印结果为15.0
作者: 李红志    时间: 2013-3-5 14:44
明白了谢谢上面几个同学
作者: 陈丽莉    时间: 2013-3-7 14:11
李红志 发表于 2013-3-5 14:44
明白了谢谢上面几个同学

下回记得自己改成【已解决】哦~
作者: 梁耀今    时间: 2013-3-8 00:44
给点技术分把!我在参加考试呢!谢谢咯!!




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