无法在java中获取Switch案例的行为

时间:2013-10-25 05:44:36

标签: java switch-statement

我在java 6中编写了小代码

public class TestSwitch{

public static void main(String... args){
    int a = 1;
    System.out.println("start");
    switch(a){
        case 1:{
            System.out.println(1);
            case 3:
                System.out.println(3);
            case 4:
                System.out.println(4);
        }
        case 2:{
            System.out.println(2);
            case 5:
                System.out.println(5);
            case 7:
                System.out.println(7);
        }

    }
    System.out.println("end");
}
}
  

输出:开始1 2结束

我的编辑器为“案例3”和“案例5”显示孤立案例。它仍在运行 并显示输出。

  • Java中是否存在类似概念的Nastated案例?
  • 为什么要提供以上输出?相反,我认为这将是'开始1结束'

    非常感谢您的回复!!

8 个答案:

答案 0 :(得分:2)

切换替换if else但切换语法!= If else语法。

您忘了在每个案例之后添加break

因此下的条件会落空。

示例:

case 0:
          mColor.setText("#000000");
          break;

You can find that in docs

  

break语句是必要的,因为如果没有它们,switch块中的语句就会失败:匹配的case标签之后的所有语句都按顺序执行,而不管后续case标签的表达式,直到遇到break语句。

public static void main(String... args){
        int a = 1;
        System.out.println("start");
        switch(a){
            case 1: 
                System.out.println(1);
                break;
            case 2:
                  System.out.println(2);
                  break;
            case 3:
                System.out.println(3);
                break;
            case 4:
                System.out.println(4);
                break;
            case 5:
                System.out.println(5);
                break;
            case 7:
                System.out.println(7);
                break;
            default:
                System.out.println("nothing");

            }

答案 1 :(得分:2)

switch(a){
    case 1:{
        System.out.println(1);
        case 3:

你不能像这样嵌套案件。 Switch应该看起来像:

    switch(a){
    case 1:
        System.out.println(1);
        break;
    case 3:
       ....

或者像这样:

switch(a){
    case 1:
        System.out.println(1);
        switch(a) {
            case 3:
                //...
                break;
            case 5 :
                //...

如果你不在案件结尾处添加中断,则执行将在之后继续。如果它们应该单独执行,你应该在每个案例的末尾添加一个中断。

答案 2 :(得分:1)

在案例2之前你有错误的括号。 案例3,4被解释为标签而不是案例。

答案 3 :(得分:1)

您的代码会出现编译错误,因为我们不能在大小写后使用大括号: 确切的代码是:

public static void main(String... args){
        int a = 1;
        System.out.println("start");
        switch(a){
            case 1:
                System.out.println(1);
                case 3:
                    System.out.println(3);
                case 4:
                    System.out.println(4);

            case 2:
                System.out.println(2);
                case 5:
                    System.out.println(5);
                case 7:
                    System.out.println(7);
            }

        System.out.println("end");
    }
    }

输出将开始 1 3 4 2 五 7 结束,因为你没有在每个案件后使用“休息”。

答案 4 :(得分:1)

由于case 1:中的no break语句执行直接跳转到case 2:并最终打印“start 1 2 end”..

答案 5 :(得分:1)

您尚未在case 2之前添加break语句。

请参阅此内容以了解有关fall through.

的更多信息
Each break statement terminates the enclosing switch statement. Control flow continues
with the first statement following the switch block. The break statements are necessary
because without them, statements in switch blocks fall through: All statements after
the matching case label are executed in sequence, regardless of the expression of
subsequent case labels, until a break statement is encountered.

答案 6 :(得分:1)

int a = 1;
System.out.println("start");
switch (a) {
case 1: {
    System.out.println(1);
    break;
}
case 3: {
    System.out.println(3);
    break;
}
case 4: {
    System.out.println(4);
    break;
}
case 2: {
    System.out.println(2);
    break;
}
case 5: {
    System.out.println(5);
    //no break will fall through and print 7 too 
}
case 7: {
    System.out.println(7);
    break;
}
default:{
    System.out.println("none");
}

}

答案 7 :(得分:0)

 See if a=1 then your case 1 will work then 1 will pe printed if as we have not using      break after case 1 so all cases are working in flow so output is coming like this if you want to execute only one case at one time then you have to put break after one case like

switch(a){
        case 1:
            System.out.println(1);
             break;
            case 3:
                System.out.println(3);
             break;
            case 4:
                System.out.println(4);
             break;

然后它会在遇到break语句

时突破switch开关