我有这段代码,可以在特定条件下(当 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中使用带有
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
break
语句会中断循环并且不会将控制权转移给标签。
使用带有
break
的标签适用于有内循环和外循环的情况。未标记的 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循环