黑马程序员技术交流社区

标题: 一个关于swith语句的小问题求解。 [打印本页]

作者: ok-Prince    时间: 2014-4-2 13:36
标题: 一个关于swith语句的小问题求解。
本帖最后由 ok-Prince 于 2014-4-2 15:08 编辑
  1. class Cz1
  2. {
  3.         public static void main(String[] args)
  4.         {                                                                                       

  5.                 int x = 2,y=3;
  6.                 switch(x)
  7.                 {
  8.                         default:
  9.                                 y++;
  10.                         case 3:
  11.                                 y++;
  12.                         case 4:
  13.                                 y++;
  14.                 }
  15.                 System.out.println("y="+y);        //y=6
  16.         }
  17. }
复制代码

运算结果为y=6,那么应该是程序先到case3判断,再到case4判断,最后走default,y自增了3次所以为6,而当我把default:y++;去掉后为什么结果变成了3?经过case3,case4两次判断后结果不应该是5么?
作者: 何建明    时间: 2014-4-2 13:39
本帖最后由 何建明 于 2014-4-2 13:42 编辑

。。。会错LZ意了,这个目的是做什么?
不加break 语句。

作者: osully    时间: 2014-4-2 13:42
x=2 不会去判断 case 3 case 4
而是去走default,而switch 特点就是 只要没遇到break 就一直往下读,往下! 一直到swtich的最后一个大括号.
所以你把default 删掉,因为没有满足条件等于就没有就没有都switch,
作者: ehuashao    时间: 2014-4-2 13:46
你的代码顺序是default,case 3,然后case 4,所以Y=6.switch是按照代码顺序来走的的,并不一定先走case.一下代码可以验证:
  1. class Cz1
  2. {
  3.         public static void main(String[] args)
  4.         {                                                                                       

  5.                 int x = 2,y=3;
  6.                 switch(x)
  7.                 {
  8.                         
  9.                         case 3:
  10.                                 y++;
  11.                         case 4:
  12.                                 y++;
  13.                         default:
  14.                             y++;
  15.                 }
  16.                 System.out.println("y="+y);        //y=6
  17.         }
  18. }
复制代码

上述代码,y的值为4.
当你把default去掉的话,由于x=2,进来之后没有符合的case所以相当于switch并没有执行一次任务,所以有还是原来的值为3.
作者: ok-Prince    时间: 2014-4-2 13:53
ehuashao 发表于 2014-4-2 13:46
你的代码顺序是default,case 3,然后case 4,所以Y=6.switch是按照代码顺序来走的的,并不一定先走case.一 ...

那就是说,如果default在上面的话,程序在读完default之后还会读case3和case4的对吗?
作者: tacyjay在路上    时间: 2014-4-2 14:01
本帖最后由 tacyjay在路上 于 2014-4-2 14:10 编辑

switch有两种结束方式,即“break; ”或者“}”,跟case和default位置无关,不过都是从case开始判断读起的。

第一种情况,有default先判断case值,则先读 case 3:  y++;     case 4:  y++;  都不满足,所以去执行default: y++;此时y=4;
由于没有遇到“break;”或者“}”,并且还有case3,case4语句没完成,所以运算继续向下执行不再判断case的值,所以执行case 3:  y++;  此时y=5,然后case 4:  y++;  此时y=6,遇到“}”,
结束switch语句,输出y=6.

第二种情况,无default先判断case值,不满足,再到default,没有,直接跳出switch,y不变,输出 y=3.

毕老师day-02-19里讲的很清楚,楼主可以再看看。


作者: ehuashao    时间: 2014-4-2 14:02
ok-Prince 发表于 2014-4-2 13:53
那就是说,如果default在上面的话,程序在读完default之后还会读case3和case4的对吗? ...

对。你可以自己试着换一下case,default的位置,就知道了。
作者: 肖涵    时间: 2014-4-2 14:05
default 用在 switch case 语句里。如果参数不满足任何 case,则为 default 情况,一般用法如下:
switch(参数) {
        case 值1:
                //语句
        case 值2:
                //语句
        ......
        default:
                //语句
}
当default在前面时,x=2没有符合的case,程序会一直向下执行。

作者: ok-Prince    时间: 2014-4-2 15:07
tacyjay在路上 发表于 2014-4-2 14:01
switch有两种结束方式,即“break; ”或者“}”,跟case和default位置无关,不过都是从case开始判断读起的 ...

懂了,谢谢!
作者: syw02014    时间: 2014-4-2 15:19
我不是很清楚你写这个程序的意思,但是switch语句有自己的规则,这个你看看:
  1. class Cz1
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int x = 2,y=3;
  6.                 switch(x)
  7.                 {
  8.                 case 3:
  9.                         y++;
  10.                         break;
  11.                 case 4:
  12.                         y++;
  13.                         break;
  14.                 default:
  15.                         y++;
  16.                 }
  17.                 System.out.println("y="+y);        //y=6
  18.         }
  19. }
复制代码




作者: 黄泉    时间: 2014-4-2 16:11
这个代码的运行顺序是:switch(x)这是判断条件  case 3的意思是当x=3时,就执行y++。case 4也是如此。当所有都不判断是,再去执行default 中的 y++ 同时,不会再去判断 case 3 与case 4  ,而是直接执行y++。因为你没有通过 break 跳出语句




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