我有这个代码,在特定条件下(当x和y都等于零时)从数组生成随机数。我希望控件跳转到标签。但控制从不在任何条件下跳转到标签。我想知道我做得对吗?
int[] arr = {0, 1, 2};
Random rn = new Random();
label: {
//some code
if (x != 0 && y !=0) {
//some code
} else {
break label;
}
}
答案 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
答案 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循环