2009-12-21 6 views

ответ

14

Here является примером использования меток и разорвать заявления без цикла:

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

w00t, узнал новую Java. – akuhn

+0

Как насчет использования LABEL wihout в определенной LABEL. Например, если (i == 0) { Продолжить label1; } еще { // сделать что-то } Label1: { // сделать что-то } – DragonBorn

+0

Я не думаю, что это возможно. Это на самом деле замаскированный goto, который не допускается на Java. – kgiannakakis

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 wihout, находящегося в определенной ЭТИКЕТКЕ.Например, если (i == 0) { Продолжить label1; } еще { // сделать что-то } label1: { // сделать что-то } – DragonBorn

5

Но зачем использовать метку на блоке кода?

Мое приложение обычно является коммутатором на переменную String (или что-либо иное, кроме 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) можно заставить работать.
  • Переключатель на String (или Object) 's плюс некоторые хэш-код более if-then-else if возможно, но , только бы смысл для многих возможностей, и в этом случае все это, вероятно, из-за ремонта.
+2

+1 для * "разбить яйца," * ':)' – ADTC

Смежные вопросы