A declaração do continue
Vamos agora completar nossa discussão de controle de loop avançado com a instrução continue, um declaração que faz com que o fluxo termine a execução do loop atual, conforme mostrado na Figura 2.10.
Você pode notar que a sintaxe da instrução continue espelha a do break. De fato, as declarações são semelhantes em como são usadas, mas com resultados diferentes. Enquanto a instrução break transfere o controle para a declaração anexa, o continue transfere o controle para a expressão booleana que determina se o loop deve continuar. Em outras palavras, termina a iteração atual do loop. Também gosto da instrução break, a instrução continue é aplicada ao loop interno mais próximo em execução usando instruções de rótulo opcionais para substituir esse comportamento. Vamos dar uma olhada no seguinte exemplo:
public class SwitchSample {
public static void main(String[] args) {
FIRST_CHAR_LOOP: for (int a = 1; a <= 4; a++) {
for (char x = 'a'; x <= 'c'; x++) {
if (a == 2 || x == 'b')
continue FIRST_CHAR_LOOP;
System.out.print(" " + a + x);
}
}
}
}
Com a estrutura definida, o loop retornará o controle ao loop pai a qualquer momento que o primeiro valor for 2 ou o segundo valor for b. Isso resulta em uma execução do loop interno para cada uma das três chamadas de loop externas. A saída é assim:
1a 3a 4a
Agora, imagine que removemos o rótulo FIRST_CHAR_LOOP na instrução continue para que o controle é retornado ao loop interno em vez do externo. Veja se você consegue entender como a saída será alterada para:
1a 1c 3a 3c 4a 4c
Finalmente, se nós removemos a declaração continue e associado a declaração if-then completamente chegamos a uma estrutura que gera todos os valores, como:
1a 1b 1c 2a 2b 2c 3a 3b 3c 4a 4b 4c
A Tabela 2.5 ajudará a lembrá-lo quando as instruções labels, break e continue forem permitidas em Java. Embora, para fins ilustrativos, nossos exemplos tenham incluído o uso desses em loops aninhados, eles podem ser usados dentro de loops únicos também.
*As etiquetas são permitidas para qualquer declaração de bloco, incluindo aquelas que são precedidas por uma declaração if-then.