我有这段代码,它在特定条件下(当 x 和 y 都等于零时)从数组生成随机数。我希望控件跳转到标签。但是控件在任何情况下都不会跳转到标签。我想知道我做的对不对?
int[] arr = {0, 1, 2};
Random rn = new Random();
label: {
//some code
if (x != 0 && y !=0) {
//some code
} else {
break label;
}
}
无需检查是否应该,是if
的,您可以在 Java中使用带标签的语句。根据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
该break
语句会中断循环并且不会将控制权转移给标签。
break
当您有内部和外部循环时,使用带有 is 的标签。未标记break
的会破坏最内层的循环(您所在的循环),而标记的则break
允许您指定外部循环。
请参阅:http ://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html
尽量避免使用标签。你可以在那里做的是:
while(true) {
if(x == 0 && y == 0) {
break;
}
// some stuff with x and y
}
我建议你使用递归函数。
public void work(){
// some code
if (x != 0 && y != 0) {
//some code
} else {
work();
}
}
break
没有循环就不能使用
据我所知,标签不能在 周围任意使用{}
,您需要使用它们来标记 for、while 或 do-while 循环