可以在没有循环的情况下使用 LABEL 块吗?有什么例子吗?
问问题
4943 次
5 回答
16
下面是一个使用标签和 break 语句而不使用循环的示例:
block1: {
if (a < 0) {
break block1;
}
if (b < 0) {
break block1;
}
return a + b;
}
于 2009-12-21T13:04:50.057 回答
4
public static void main(String[] args)
{
hello: break hello;
}
于 2009-12-21T13:01:45.867 回答
4
但是为什么要在代码块上使用标签呢?
我的应用程序通常是一个字符串变量(或除 char、byte、short、int、Enum 以外的任何东西)的开关。
“要做一个煎蛋,你必须打碎一些鸡蛋”
例子:
String key = "scrambled";
eggs: {
if ("do-nothing".equals(key)) break eggs;
if ("scrambled".equals(key)) {
;//scramble code here
break eggs;
}
if ("fried".equals(key)) {
;//fry code here
break eggs;
}
//default behaviour goes here
//or maybe throw an exception
}
好的,好的,“有时候,要做一个煎蛋,你必须杀几个人”
备择方案:
- Java 7 允许 String 作为开关。
- 可以使使用 MyEnum.valueOf(str) 的 Enum 解决方法起作用。
- 可以切换字符串(或对象)的哈希码以及更多的哈希码,
if-then-else if
但只会对很多可能性有意义,在这种情况下,整个事情可能需要大修。
于 2013-03-13T09:29:12.723 回答
3
当然:
private boolean isSafe(String data) {
validation: {
if (data.contains("voldemort")) {
break validation;
}
if (data.contains("avada")) {
break validation;
}
if (data.contains("kedavra")) {
break validation;
}
return true;
}
return false;
}
@DragonBorn:那是不可能的。您只能在其范围内继续或中断标签,例如:
label1: for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
System.out.println(i + " " + j);
if (i == j) {
continue label1;
}
}
}
产生:
0 0
1 0
1 1
2 0
2 1
2 2
3 0
3 1
3 2
3 3
于 2009-12-21T14:10:34.527 回答
0
如果你想要一些不可读的代码:
int i = 1;
int j = 1;
label: switch (i) {
case 1:
switch (j) {
case 1:
break label;
}
default:
System.out.println("end");
}
没有break;
将打印“结束”。break label;
将跳过打印。
于 2009-12-21T13:09:04.137 回答