【问题标题】:how does the output became 2? don't understand [closed]输出怎么变成2了?不明白[关闭]
【发布时间】:2020-04-29 05:39:23
【问题描述】:
public class Ex33 {
    public static void main(String[] args) {
        int x = 3, result = 4;
        switch (x + 3) {
            case 6: result = 0;
            case 7: result = 1;
            default: result += 1;
        }
        System.out.println(result);
    }
}

不明白答案是怎么变成2的?

【问题讨论】:

  • 供将来参考:邮政编码,而不是代码图像。不要只说“不明白”,要说你不明白的。你期望它是什么,为什么?

标签: java switch-statement coding-style


【解决方案1】:

case 没有break 的语句“失败”

case 7: result = 1;   // <-- no break, so
default: result += 1; // <-- happens after case 7

这是documented 行为

另一个有趣的地方是break 语句。每个break 语句都会终止封闭的switch 语句。控制流继续switch 块之后的第一条语句。 break 语句是必要的,因为没有它们,switch 块中的语句会通过:匹配 case 标签之后的所有语句都将按顺序执行,无论后续 case 标签的表达式如何,直到一个 break 语句遇到了

【讨论】:

    【解决方案2】:

    匹配的case标签之后的所有语句都按顺序执行,无论后续case标签的表达式如何,直到遇到break语句。 放一个有效的中断操作!

    【讨论】:

      【解决方案3】:

      由于在每种情况下都没有break;,因此您的案例语句正在失败并且无法退出循环。您的所有案例都在申请中,因此产生了result = 2

      格式正确的代码如下所示:

          int x =3, result=4;
      
          switch (x+4){
              case 6: 
                  result = 0;
                  break;
      
              case 7: 
                  result = 1;
                  break;
      
              default: 
                  result+=1;
          }
      
          System.out.println(result);
      

      【讨论】:

      • 你怎么知道这段代码是正确的?可能代码是正确的,OP只是不理解代码。
      • 在 switch case 中缺少 break 语句是一个常见的错误。这一事实,伴随着 OP 的问题的框架方式,表明这段代码是他想要的。
      • 据我们所知,他看到了他不理解的代码。这是他期望的输出,并不意味着他的“想要”是相关的
      • 那我们就等他上线澄清
      【解决方案4】:

      如果你想阻止其他 case 语句的执行,你必须在每个 case 之后放置 break 语句。所以得到结果值为 1 的等效代码是:

      int x =3, result=4;
              switch (x+4){
                  case 6: result = 0;
                  break;
                  case 7: result = 1;
                  break;
                  default: result+=1;
              }
              System.out.println(result);
      

      阅读here中的一些重要的switch语句规则部分

      【讨论】:

      • “必须”是一个粗体声明,因为你是否必须放置break语句,取决于你的要求
      • @Stultuske 是正确的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多