默认情况始终在菜单开关中运行

时间:2018-05-17 08:29:08

标签: java switch-statement

为什么默认情况总是在运行?

public class HelloWorld {
    public enum ScenarioState {
        INIT,
        START,
        STOP,
        DESTROY
    }

    public static void displayRecord(ScenarioState state) {
        switch (state) {
            case INIT:
            case START:
            case STOP:
                System.out.println("1");
            default:
                System.out.println("default");
        }
    }

    public static void main(String[] args) {
        ScenarioState state = ScenarioState.INIT;
        displayRecord(state);
    }
}

预期输出应为

  

1

但实际输出:

  

1
  默认

为什么会导致这个问题?任何人都可以帮助我

3 个答案:

答案 0 :(得分:4)

您需要在所有切换分支中添加break,否则您将体验到现在正在经历的内容,称为直通

Java将依次从匹配的case开始执行所有语句,直到遇到switch或break语句为止。

在你的情况下,除了默认分支之外,它似乎实际上想要所有分支的落空。因此,您需要在STOP案例的末尾添加一个中断。

这是正确的方法:

switch (state)
{
    case INIT:
    case START:
    case STOP:
        System.out.println("1");
        break;
    default:
        System.out.println("default");
}

答案 1 :(得分:2)

break;语句添加到案例

之后

答案 2 :(得分:0)

您需要在每个案例陈述的末尾添加break;