2009-12-21 154 views

回答

4
public static void main(String[] args) 
    { 
    hello: break hello; 
    } 
14

Here是使用标签和break语句没有环的一个例子:

 block1: { 
      if (a < 0) { 
       break block1; 
      } 
      if (b < 0) { 
       break block1; 
      } 
      return a + b; 
     } 
+4

w00t,学到了一些新的Java。 – akuhn 2009-12-21 14:38:28

+0

如何使用LABEL而不在定义的LABEL中。就像if(i == 0){ continue label1; }其他{// 做一些 } LABEL1:{// 做一些 } – DragonBorn 2009-12-21 15:07:29

+0

我不认为这是可能的。它实际上是一个伪装的goto,这在Java中是不允许的。 – kgiannakakis 2009-12-21 15:49:37

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;将跳过打印。

2

肯定:

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 
+0

如何使用LABEL而不在定义的LABEL中。就像if(i == 0){ continue label1; }其他{// 做一些 } LABEL1:{// 做一些 } – DragonBorn 2009-12-21 15:09:13

5

但是,为什么一个代码块上使用标签?

我的应用程序通常是一个字符串变量(或除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作为开关。
  • 使用 的Enum解决方法MyEnum.valueOf(str)可以工作。
  • 的字符串(或 对象)交换机的哈希码加上一些if-then-else if是可能的,但 只会使意义很多的可能性,在这种情况下 整个事情很可能是由于该大修了。
+2

+1 * “打破鸡蛋;” *':)' – ADTC 2014-08-05 04:50:33

相关问题