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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ok-Prince 中级黑马   /  2014-4-2 13:36  /  2434 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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么?

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

10 个回复

倒序浏览
本帖最后由 何建明 于 2014-4-2 13:42 编辑

。。。会错LZ意了,这个目的是做什么?
不加break 语句。
回复 使用道具 举报
x=2 不会去判断 case 3 case 4
而是去走default,而switch 特点就是 只要没遇到break 就一直往下读,往下! 一直到swtich的最后一个大括号.
所以你把default 删掉,因为没有满足条件等于就没有就没有都switch,

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

回复 使用道具 举报 1 0
你的代码顺序是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.

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

回复 使用道具 举报
ehuashao 发表于 2014-4-2 13:46
你的代码顺序是default,case 3,然后case 4,所以Y=6.switch是按照代码顺序来走的的,并不一定先走case.一 ...

那就是说,如果default在上面的话,程序在读完default之后还会读case3和case4的对吗?
回复 使用道具 举报
本帖最后由 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里讲的很清楚,楼主可以再看看。

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

回复 使用道具 举报
ok-Prince 发表于 2014-4-2 13:53
那就是说,如果default在上面的话,程序在读完default之后还会读case3和case4的对吗? ...

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

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

回复 使用道具 举报
tacyjay在路上 发表于 2014-4-2 14:01
switch有两种结束方式,即“break; ”或者“}”,跟case和default位置无关,不过都是从case开始判断读起的 ...

懂了,谢谢!
回复 使用道具 举报
我不是很清楚你写这个程序的意思,但是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. }
复制代码



回复 使用道具 举报
这个代码的运行顺序是:switch(x)这是判断条件  case 3的意思是当x=3时,就执行y++。case 4也是如此。当所有都不判断是,再去执行default 中的 y++ 同时,不会再去判断 case 3 与case 4  ,而是直接执行y++。因为你没有通过 break 跳出语句
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马