8

可以在没有循环的情况下使用 LABEL 块吗?有什么例子吗?

4

5 回答 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 回答