【问题标题】:Why can't I use 'continue' inside a switch statement in Java?为什么我不能在 Java 的 switch 语句中使用“继续”?
【发布时间】:2011-02-01 01:53:05
【问题描述】:

为什么是下面的代码:

class swi  
{
    public static void main(String[] args)  
    {  
        int a=98;
        switch(a)
        {
            default:{ System.out.println("default");continue;}
            case 'b':{ System.out.println(a); continue;}
            case 'a':{ System.out.println(a);}
        }
        System.out.println("Switch Completed");
    }
}

给出错误:

在循环外继续

【问题讨论】:

  • 语法上我也同意,但这背后的逻辑是什么,为什么不能在可以使用 break 的地方继续使用?
  • @abson:因为continuebreak 有不同的用途,而breakswitch 和循环都相关,continue 不是——没有“顶部” " 跳回。
  • 对不起,我知道 switch 只是条件语句,而不是循环结构,是吗?
  • @abson:没错,switch 不是循环,而是索引查找(基本上是优化的 if/else/else/else,不允许重复条件)。
  • @Springrbua:对,只有当您使用break 时。如果你不这样做,它基本上是一个 goto,因为你跳转到匹配的案例,但是当你到达那个案例的结尾时,你继续下一个案例的逻辑,即使那个案例不匹配,等等直到你掉到switch的底部。

标签: java switch-statement continue


【解决方案1】:

continue 内部开关??!!!只有break可以保留在switch里面!

你的代码应该是,

class swi22  
{
     public static void main(String[] args)  
     {  
         int a=98;
         switch(a)
         {
             default:{ System.out.println("default");break;}
             case 'b':{ System.out.println(a); break;}
             case 'a':{ System.out.println(a);}
          }
          System.out.println("Switch Completed");
     }
}

【讨论】:

    【解决方案2】:

    您不应该使用break 而不是continue吗?

    【讨论】:

      【解决方案3】:

      您在应该使用break的地方使用continue

      【讨论】:

        【解决方案4】:

        因为您在循环之外有一个continuecontinue 用于跳回循环的开头,但该代码中没有任何循环。你想要打破switch case 块是关键字break(见下文)。

        也没有必要将每个 case 块都放在大括号内(除非您希望在其中包含局部范围的变量)。

        所以有点像这样的东西会更标准:

        class swi22
        {
            public static void main(String[] args)
            {
                int a=98;
                switch(a)
                {
                    default:
                        System.out.println("default");
                        break;
                    case 'b':
                        System.out.println(a);
                        break;
                    case 'a':
                        System.out.println(a);
                        break;
                }
                System.out.println("Switch Completed");
            }
        }
        

        还有一种观点认为default 条件应该始终位于末尾。这不是要求,只是一个相当广泛使用的约定。

        【讨论】:

          【解决方案5】:

          continue-Statement 可以在循环中使用,而不是在 switch 中使用。你可能想要的是break

          【讨论】:

            【解决方案6】:

            continue 直接移动到循环的下一个迭代。

            break 用于跳出循环和开关。

            使用break; 而不是continue;

            继续:

            for(x = 0; x < 10; x++)
            {
               if(x == 3)
                 continue;
               else       
                 DoIterativeWork();       
            }
            

            开关:

            switch(a)
            {
             default:{ System.out.println("default"); break;}
             case 'b':{ System.out.println(a); break;}
             case 'a':{ System.out.println(a);}
            }
            

            【讨论】:

              【解决方案7】:

              失败是 switch 语句的标准行为,因此,在 switch 语句中使用 continue 没有意义。 continue 语句只用在 for/while/do..while 循环中。

              根据我对你意图的理解,你可能想写:

              System.out.println("default");
              if ( (a == 'a') || (a == 'b') ){
                  System.out.println(a);
              }
              

              我还建议您将默认条件放在最后。

              编辑: 不能在 switch 语句中使用 continue 语句并不完全正确。 (理想标记的)continue 语句是完全有效的。例如:

              public class Main {
              public static void main(String[] args) {
                  loop:
                  for (int i=0; i<10; i++) {
                      switch (i) {
                      case 1:
                      case 3:
                      case 5:
                      case 7:
                      case 9:
                          continue loop;
                      }
              
                      System.out.println(i);
                  }
              }
              }
              

              这将产生以下输出: 0 2 4 6 8

              【讨论】:

              • 未标记的 continue 会前进到循环的下一次迭代,并且不会前进到下一个案例?
              • 如果没有标签,它会使for循环以同样的方式向前跳转。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2010-09-25
              • 2020-04-12
              • 1970-01-01
              • 2012-10-04
              • 1970-01-01
              相关资源
              最近更新 更多