【问题标题】:The default case always run in menu switch [duplicate]默认情况下始终在菜单开关中运行[重复]
【发布时间】:2018-05-17 08:29:08
【问题描述】:

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

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
默认

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

【问题讨论】:

  • 你忘记break;声明了吗?
  • 您缺少break; 语句。

标签: java switch-statement


【解决方案1】:

您需要将break 添加到您的所有交换机分支,否则您将体验到您现在正在体验的情况,称为失败

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

在您的情况下,除了默认分支之外,它似乎实际上希望您的所有分支都采用这种方式。因此,您需要在 STOP 案例的末尾添加一个中断。

这是正确的方法:

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

【讨论】:

  • 我能问一下为什么这会被否决吗?我错过了什么吗?
  • 不知道,我在看这个问题,认为这个答案是最完整的。也许是因为回答了一个肯定重复的低质量问题?无论如何,这个答案是三个中最好的,并且解决了问题的作者。投票赞成
  • 我投了反对票,因为 OP 显然希望在打开 INIT 时打印出 1。您的答案不再允许
  • 进行编辑,否决票将被撤回。因为目前你的答案只是错误和误导
  • 我已经这样做了;)
【解决方案2】:

break; 语句添加到您的案例之后

【讨论】:

    【解决方案3】:

    您需要在每个 case 语句的末尾添加break;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-17
      • 2021-02-24
      • 1970-01-01
      • 1970-01-01
      • 2020-01-31
      • 2018-11-20
      相关资源
      最近更新 更多