Instrução continue em Java
Pule o restante da iteração atual do loop em Java com a instrução continue, incluindo continue com rótulos.
continue é o primo mais leve do break. Enquanto break diz pare o loop completamente, continue diz pule o restante desta iteração e comece a próxima. O loop continua executando.
Esta página aborda como continue retoma cada tipo de loop, a armadilha do loop infinito em loops while, como usá-lo para filtrar elementos, quando preferi-lo a um if invertido e como ele afeta apenas o loop mais interno.
Uso básico
for (int i = 0; i < 5; i++) {
if (i == 2) {
continue;
}
System.out.println(i);
}Saída:
0
1
3
4Quando i == 2, continue pula diretamente para o passo de atualização do loop (i++), ignorando o println. O loop então reavalia sua condição e prossegue com i == 3.
Como os loops retomam
O comportamento depende do tipo de loop:
for— executa a expressão de atualização e, em seguida, verifica a condiçãowhile— verifica a condição imediatamentedo/while— verifica a condição imediatamente (no final do loop)foraprimorado — move para o próximo elemento
Um continue em um while que esquece de avançar o estado pode rapidamente se tornar um loop infinito:
int i = 0;
while (i < 5) {
if (i == 2) {
continue; // i never advances — infinite loop!
}
System.out.println(i);
i++;
}Este é um erro clássico. Incremente antes do continue ou use um loop for para que o passo de atualização seja executado automaticamente.
Filtrando elementos
O uso mais comum de continue é "pular os elementos que não me interessam":
int[] nums = {3, 7, 2, 8, 5, 4};
for (int n : nums) {
if (n % 2 != 0) {
continue; // skip odd numbers
}
System.out.println(n);
}Saída: 2 8 4.
continue vs. inversão da condição
Muitas vezes você pode reescrever um continue como um if que envolve o restante do corpo:
for (int n : nums) {
if (n % 2 == 0) {
System.out.println(n);
}
}Funcionalmente idêntico. A preferência é uma questão de estilo:
- Use
continuequando houver múltiplas condições de pulo; uma série de verificações antecipadas é mais plana do queifs profundamente aninhados. - Use um
ifenvolvente quando a condição de pulo é simples e o corpo é curto.
// continue style — easy to add another skip condition
for (User u : users) {
if (u == null) continue;
if (!u.isActive()) continue;
if (u.isBanned()) continue;
process(u);
}continue ignora apenas um nível
Assim como break, continue afeta apenas o loop mais interno que o envolve:
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (j == 1) continue; // only skips inner iteration
System.out.println(i + "," + j);
}
}Saída:
0,0
0,2
1,0
1,2
2,0
2,2Para usar continue no loop externo a partir do loop interno, utilize um continue com rótulo — abordado em instruções com rótulo.
Um exemplo prático
O que vem a seguir
Quando você combina loops for, obtém loops aninhados — a base para trabalhar com grades, tabelas e arrays bidimensionais.