在 if-else 语句中使用标签和中断

问题描述 投票:0回答:5

我有这段代码,可以在特定条件下(当 x 和 y 都等于 0 时)从数组生成随机数。我想让控件跳转到标签。但该控件在任何情况下都不会跳转到标签。我想知道我这样做对不对?

int[] arr = {0, 1, 2};    
Random rn = new Random();
label: {
    //some code
    if (x != 0 && y !=0) {
        //some code
    } else {
        break label;
    }
}
java break labeled-statements
5个回答
12
投票

无需检查是否应该,,您可以在Java中使用带有

if
的标记语句。根据1.7规范

标识符被声明为直接包含的语句的标签。 [...] 标识符语句标签与出现在带标签语句中任意位置的 break (§14.15) 或 continue (§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

3
投票

break
语句会中断循环并且不会将控制权转移给标签。

使用带有

break
的标签适用于有内循环和外循环的情况。未标记的
break
会中断最内层循环(您所在的循环),而标记的
break
允许您指定外部循环。

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

特别是BreakWithLabelDemo


2
投票

尝试避免使用标签。你可以在那里做的是:

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

1
投票

我建议你使用递归函数。

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

如果没有循环就无法使用

break


-1
投票

据我所知,标签不能在

{}
周围随意使用,你需要用它们来标记for、while或do-while循环

© www.soinside.com 2019 - 2024. All rights reserved.