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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

package test;

public class Test {
        public static void main(String[] args) {
                int a=1,b=0;
                switch(a){
                        case 1:
                                switch(b){
                                case 0:
                                        System.out.println(3);
                                        break;
                                }
                                case 2:
                                        System.out.println(5);
                }
        }
}
结果是:
3
5

评分

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

查看全部评分

9 个回复

倒序浏览
第一个switch(a)比较a当a与下面case中的某一个相等时,该case后面的语句被执行,因为a等于1 case 1后面的语句被执行,因b=0case 0后面的代码被执行,因为楼主switc(a)中的case1 后面没有加break语句,所以case1执行完后接着又执行了case2,才会出现这样的结果,如果楼主不想case2运行,可以在case1后加break语句,

评分

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

查看全部评分

回复 使用道具 举报
  1. //一旦case匹配,就会顺序执行后面的程序代码,而不管后面的case是否匹配,直到遇见break,
  2. public class test {
  3.         public static void main(String[] args)
  4.         {
  5.                 int a=1,b=0;
  6.                 switch(a)
  7.                 {
  8.                         case 1://这里匹配  但是结束这个语句没有break
  9.                                 switch(b)
  10.                                 {
  11.                                         case 0:
  12.                                                 System.out.println(3);
  13.                                                 break;//这个不是case得break
  14.                                 }
  15.                         case 2://所以case 2也执行
  16.                             System.out.println(5);
  17.                 }
  18.         }
  19. }
复制代码


评分

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

查看全部评分

回复 使用道具 举报
yanzhendong 发表于 2014-3-23 19:32
第一个switch(a)比较a当a与下面case中的某一个相等时,该case后面的语句被执行,因为a等于1 case 1后面的语 ...

恩恩,明白了谢谢
回复 使用道具 举报

恩恩,非常感谢
回复 使用道具 举报
原因在注释里:
  1. public class Test {
  2.         public static void main(String[] args) {
  3.                 int a = 1, b = 0;
  4.                 switch (a) {
  5.                 case 1:
  6.                         switch (b) {
  7.                         case 0:
  8.                                 System.out.println(3);
  9.                                 break[color=Red];//此处跳出的是switch(b)[/color]
  10.                         }
  11.                         [color=Red]//跳到这里,因为这里并没有break,继续执行case 2:[/color]
  12.                 case 2:
  13.                         System.out.println(5);
  14.                 }
  15.         }
  16. }
复制代码

请跟下边程序比较
  1. public class Test {
  2.         public static void main(String[] args) {
  3.                 int a = 1, b = 0;
  4.                 switch (a) {
  5.                 case 1:
  6.                         switch (b) {
  7.                         case 0:
  8.                                 System.out.println(3);
  9.                                 break;//此处跳出的是switch(b)
  10.                         }
  11.                         [color=Red]break[/color];//跳到这里,遇到swtich(a) case 1的break
  12.                 case 2:
  13.                         System.out.println(5);
  14.                 }
  15.         }
  16. }
复制代码

评分

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

查看全部评分

回复 使用道具 举报
switch里的参数只与当前括号里的case后面的值作比较

   
回复 使用道具 举报
Ranger 中级黑马 2014-3-23 22:31:01
8#

package test;

public class Test {
        public static void main(String[] args) {
                int a=1,b=0;
                switch(a){
                        case 1://a的值为1  进入这个选择
                                switch(b){//b的值为0,进入这个选择
                                case 0:
                                        System.out.println(3);//输出3
                                        break;//跳出   switch(b){}语句
                                }
                                case 2://由于 switch(a){}语句中的 case1 没有break;,switch语句的穿透性,执行//case2
                                        System.out.println(5);//输出5
                }
        }
}
结果写在了注释中~

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 无此姓名 于 2014-3-23 22:42 编辑

  1. package test;

  2. public class Test {
  3.         public static void main(String[] args) {
  4.                 int a=1,b=0;
  5.                 switch(a){
  6.                         case 1:
  7.                                 switch(b){
  8.                                 case 0:
  9.                                         System.out.println(3);
  10.                                         break;
  11.                                 }
  12.                                 break;        //要在这里加一个break,才能跳出外层switch;否则就依次执行下面的语句,直到执行break;
  13.                                 case 2:
  14.                                         System.out.println(5);
  15.                                 case 1000:
  16.                                         System.out.println(1000);        //如果加上这一条也会执行。
  17.                 }
  18.         }
  19. }
复制代码


打印3,楼主肯定没有疑问,主要就是5这里。
switch语句,每一个case都要有一个break。否则,如果case的条件成立,就会依次执行下面的语句,直到碰到break,或switch语句结束。

评分

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

查看全部评分

回复 使用道具 举报
  1. public class Test {
  2.         public static void main(String[] args) {
  3.                 int a=1,b=0;
  4.                 switch(a){ //这个是判断如果a是几就打印case几对用的输出语句
  5.                         case 1:
  6.                                 switch(b){
  7.                                 case 0:
  8.                                         System.out.println(3);
  9.                                                                                 //这个break只是把switch(b)给结束了但是switch(a)这个循环缺没有结束。
  10.                                                                                 //而switch(a)中的case 1却没有结束语句。所以在打印3之后。跳出switch(b)这个循环
  11.                                                                                 //进入switch(a)的case 1这个循环。而case 1这个循环因为没有碰到break停止。接着就
  12.                                                                                 //打印了5,打印完5之后没有要打印的语句了。所以就退出循环。
  13.                                                                                 //所以打印的结果为3 5.
  14.                                                                                 //记住,在switch循环中没个case后面都要加上break;如果不加break的话,就会
  15.                                                                                 //一直循环到这个循环中没有要打印的语句才会跳出循环。
  16.                                         break;
  17.                                 }
  18.                                 case 2:
  19.                                         System.out.println(5);
  20.                 }
  21.         }
  22. }
复制代码


评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马