本人初学,请高手指教
int i=2;
switch (i){
   case 1:System.out.println(i);break;
   case 2:System.out.println(i);
   case 3:System.out.println(i);
   case 4:System.out.println(i);
   default:System.out.println(i);
}
到case2时已经找到匹配的了,已经不匹配case3了,为什么还是执行了case3的打印语句呢,加break就不会执行了,可是明明不匹配case3,为什么还会执行呢?后面的也是,直到break语句。
int i=2;
switch (i){
default:System.out.println(i);
case 1:System.out.println(i);
case 2:System.out.println(i);
case 3:System.out.println(i);
case 4:System.out.println(i);
}
还有这段把default放在前面,上来就会执行它,是吗,然后case1也执行了,到case2执行完。
请大家帮忙分析一下,谢谢!

解决方案 »

  1.   

    case再很大程度上跟标号类似,它只是决定switch跳到哪里开始执行,而并不能决定执行到哪里结束,只有break能终止整个switch。
      

  2.   

    switch语句它根据你给的整形数判断,然后就查询匹配的case,找到后就在那里开始,当看到break就结束,如果没有就一直按循序执行。
    第一个程序就是从2开始到default;
    第二个程序,并没有从default开始,因为它找到case很合适,就从那里开始了。所以default没有执行
      

  3.   

    default是当你的case中没有适合的时候才执行的。
    把你的程序改成这样,你看看就知道了:
    int i=2;
    switch (i){
       default:System.out.println(i);
       case 1:System.out.println(i);
       case 6:System.out.println(i);//让它找不到2!!
       case 3:System.out.println(i);
       case 4:System.out.println(i);
    }结果是程序从default开始了
      

  4.   

    case语句只相当与定义了一个标签位置,switch一旦碰到第一个case匹配程序就会条转到这个标签位置,开始顺序执行以后的代码而不管后面的case条件是否匹配,后面的case条件下的所有代码都将被执行,直到碰到break语句为止,如果你不写break当然程序找到匹配的哪个case后就顺序的执行下去了default其实就是比如你没有一个匹配的也就是你那I=2找不到匹配的case后打印这句这个i=2没人要了就归defualt管执行他里面的语句了,在你第2个程序里你的i=2和第2个匹配所以就有匹配的case所以当然就不归defualt管了,如果你把defualt放在程序最后面在他上一个case语句后没写break程序也会输出case,因为他是找到匹配后顺序执行下来.
    int i=10;
    switch (i){
       case 1:System.out.println(i);break;
       case 2:System.out.println(i);break;
       case 3:System.out.println(i);break;
       case 4:System.out.println(i);break;
       default:System.out.println("sorry");这样你I为10找不到匹配的后就执行default里的语句
    这样你把default放到那里都一样只有找不到任何匹配才执行他
    int i=10;
    switch (i){
    default:System.out.println(i);
    case 1:System.out.println(i);
    case 2:System.out.println(i);
    case 3:System.out.println(i);
    case 4:System.out.println(i);
    没加break并且也没有一个匹配的default又放在最前面执行结果就是default里的代码和后面那几个case里的全部输出
      

  5.   

    这应该是switch 的语法规定,没什么为什么,必须加break才跳转
      

  6.   

    case是什么意思啊?它只给你找到开始,要结束得你自己来,return或者break,etc.
      

  7.   

    一定要break ,怎么这么多人问switch的呢。
      

  8.   

    只有break能终止整个switch,没有break程序就一直执行下去到结束