黑马程序员技术交流社区

标题: 为什么是 9 [打印本页]

作者: 刘永贵    时间: 2014-3-17 12:06
标题: 为什么是 9
public class aa {
        public static void main(String[] args) {
               
                int num = 4;
                int y = 0;
                switch(num) {
                        case 1:
                                y++;
                        case 2:
                                y+=2;       
                        case 3:
                                y+=3;
                        case 4:
                                y+=4;
                        case 5:
                                y+=5;
                }
                System.out.println(y);
        }
}
运行结果是什么  为什么


作者: chen20134    时间: 2014-3-17 12:15
  1. public class Test05 {
  2.     public static void main(String[] args) {
  3.             
  4.             int num = 4;
  5.             int y = 0;
  6.             switch(num) {
  7.                     case 1:
  8.                             y++;break;
  9.                     case 2:
  10.                             y+=2;break;      
  11.                     case 3:
  12.                             y+=3;break;
  13.                     case 4:
  14.                             y+=4;break;
  15.                     case 5:
  16.                             y+=5;break;
  17.             }
  18.             System.out.println(y);
  19.     }
  20. }
复制代码


你的代码中少了break语句,当num=4时,执行的语句是
y+=4;
y+=5;
所以y=9。
作者: 歌尽繁华    时间: 2014-3-17 12:21
case语句后面没break,程序会一直执行到swich最后
作者: 蓝枫    时间: 2014-3-17 12:29
如果匹配的case或者default没有对应的break, 那么程序会继续向下执行,运行可以执行的语句,直到遇到break或者switch结尾结束。你的代码中没有break,会一直执行到switch的大括号结束。所以结果是9
作者: 汗血黑马    时间: 2014-3-17 12:38
switch语句是选择语句,只能接受int. byte. short. char 数据类型;break关键字的作用是,结束语句,返回当前值,你应该养成case 和break配套使用的习惯,如果不用break,程序会继续向下执行,y = 4, y+=5,结果就是9了;如果加上break,程序就不会再往下走,返回所匹配的值。
作者: 董振冬    时间: 2014-3-17 12:57
介个很好解释的,首先num=4, switch语句跳到case4 (介个不需要解释吧,switch语句),y+=4;      
作者: 董振冬    时间: 2014-3-17 12:59
然后,y=0 ,即 0+=4,   y= 4 接着往下执行,跳到case5    y+=5;即y =  (4+ =5)
作者: 王竞    时间: 2014-3-17 13:57
你的case语句后面并没有写上break,所以导致在执行的时候,会依顺序往下执行,直到结束,或者在下面遇到beak;并没有在执行完成一个case条件以后就退出,这种写法也有一定的用途,比如
public class Test{
        public static void main(String[] args) {
               
                int num = 1;
                switch(num) {
                        case 1:
                              
                        case 2:
                              
                        case 3:
                               System.out.println("A");//当num 等一 1 或 2 或 3 时,都是打印出A
                               beak;
                        case 4:
                               System.out.println("B");
                              beak;
                        case 5:
                               System.out.println("C");
                              beak;
                      default:
                              System.out.println("D");
                }
        }
}






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