这个错误意味着break语句中缺少标签z?

时间:2013-08-16 05:26:29

标签: java

嗨,在下面的代码我试图使用break和标签出来for循环,但我收到以下错误。 Label Z is missing.请帮我解释下面的代码。请提及为什么会出现此错误。

public class Breaker {
    static String o = "";
    public static void main(String[] args) {
        z:
        o = o + 2;
        for(int x = 3; x < 8; x++) {
            if(x==4) break;
            if(x==6) break z;
            o = o + x;
        }
        System.out.println(o);
     }
 }

3 个答案:

答案 0 :(得分:3)

您收到错误,因为在您的代码标签中z:没有包含任何循环:

尝试下面的代码:我刚刚在标签z之后添加了一对大括号:你不会得到任何编译错误,你的代码也会运行。

public class Breaker {
    static String o = "";
    public static void main(String[] args) {
        z:
        {
        o = o + 2;
        for(int x = 3; x < 8; x++) {
            if(x==4) break;
            if(x==6) break z;
            o = o + x;
        }
        System.out.println(o);
     }
    }
 }

答案 1 :(得分:1)

为了打破循环,你必须标记循环语句,而不是其他语句。 break someLabel只能与嵌套循环一起使用。否则,您可以使用普通break

答案 2 :(得分:0)

public void twoNum( int num, int val )
{
OUTER_LOOP: // OUTER_LOOP is a label
  for ( int i = 0 ; i < num ; i++ )
  {
      for ( int j = 0 ; j < num ; j++ )
      {
         if ( i + j >= 2 * val )
            break OUTER_LOOP ;
         val = val / 2 ;
      }
  }
  // break comes here if it runs
}

当你写:

  break OUTER_LOOP ;

标签OUTER_LOOP必须是封闭循环的标签。通常,这不是最内层的封闭循环,因为我们可以使用普通的break语句,而不是“使用标签中断”。 label必须在loop声明的break封闭之前。

Incremental Java

除了sysntax错误(lable的位置)之外,如果您从上述摘要中了解到,在您的情况下,您只是break