在if-else语句中使用label和break

时间:2013-02-12 15:21:08

标签: java label break

我有这个代码,在特定条件下(当x和y都等于零时)从数组生成随机数。我希望控件跳转到标签。但控制从不在任何条件下跳转到标签。我想知道我做得对吗?

int[] arr = {0, 1, 2};    
Random rn = new Random();
label: {
    //some code
    if (x != 0 && y !=0) {
        //some code
    } else {
        break label;
    }
}

5 个答案:

答案 0 :(得分:4)

如果不检查是否应该,您可以在Java中使用带有if的带标签语句。根据{{​​3}}

  

标识符被声明为直接包含的Statement的标签。 [...]标识符语句标签与标记语句中出现的1.7 specification(§14.15)或break(§14.16)语句一起使用。

继续(强调添加)

  

如果语句由标识符标记,并且包含的​​语句由于相同标识符的中断而突然完成,则标记语句正常完成。在突然完成声明的所有其他情况下,标签声明因同样的原因突然完成。

因此,如果您break if阻止(请记住某个块是一个语句),您可以退出if正文。我们来测试一下:

public static void main(String[] args) {
    if (true) label: {
        if (args != null)
            break label;
        System.out.println("doesn't get here");
    }
    System.out.println("Outside of labeled block");
}

输出:

Outside of labeled block

答案 1 :(得分:3)

break语句会破坏循环,并且不会将控制转移到标签。

使用带有break的标签适用于有内圈和外圈的情况。未标记的break会打破最内层的循环(您所在的循环),而标记为break的循环则允许您指定外循环。

请参阅:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html

特别是BreakWithLabelDemo

答案 2 :(得分:2)

尝试避免使用标签。你能做的是:

while(true) {
    if(x == 0 && y == 0) {
        break;
    }
    // some stuff with x and y
}

答案 3 :(得分:1)

我建议您使用递归函数。

public void work(){
    // some code
    if (x != 0 && y != 0) {
        //some code
    } else {
        work();
    }
} 

您无法使用break无循环

答案 4 :(得分:-1)

据我所知,标签不能在{}周围任意使用,你需要这些标签来标记for,while或do-while循环