INC - Labelled Loops
Jonas Abreu em 31/03/2008Quem disse que java é bonito? C pelo menos tem a coragem de assumir que tem goto. Java disfarça na estrutura que chamamaram de Labelled Loops.
Brincadeiras a parte, embora o goto seja uma palavra reservada do Java, ele não está implementado. Como a única razão para se manter o goto em uma linguagem é você poder quebrar vários laços de uma vez (o que costuma indicar que seu código não deve estar muito bom), Java simplesmente permite que você de nomes aos seus laços e passe, como parâmetro para break e continue o label do seu loop.
public class Teste {
public static void main(String []args){
externo:for (int i = 0; i < 10; i++){
System.out.println("i = " + i);
interno:for (int j = 0; j < 20; j++){
System.out.println("j = " + j);
if (j < 4 && (j & 1) == 0)
break interno;
if ((i * j) / 5 > 0)
break externo;
}
}
}
}
Quando você rodar esse código feio e nojento, a saída será:
i = 0
j = 0
i = 1
j = 0
i = 2
j = 0
i = 3
j = 0
i = 4
j = 0
i = 5
j = 0
i = 6
j = 0
i = 7
j = 0
i = 8
j = 0
i = 9
j = 0
Fiz o código bem feio pra deixar bem claro que embora exista, isso não deve ser usado nos seus códigos. Um simples break já pode causar confusão. Imaginem um monte de break e continue com uma palavra na frente. Você praticamente está condenando seu projeto ao fracasso (por que dois dias mais tarde você não conseguirá entender o que está escrito).