Sentencia continue en Java
Omite el resto de la iteración actual del bucle en Java con la sentencia continue, incluyendo continue con etiquetas.
continue es el primo más ligero de break. Donde break dice detén el bucle por completo, continue dice omite el resto de esta iteración y comienza la siguiente. El bucle sigue ejecutándose.
Esta página explica cómo continue reanuda cada tipo de bucle, la trampa del bucle infinito en los bucles while, su uso para filtrar elementos, cuándo preferirlo sobre un if invertido, y cómo solo afecta al bucle más interno.
Uso básico
for (int i = 0; i < 5; i++) {
if (i == 2) {
continue;
}
System.out.println(i);
}Salida:
0
1
3
4Cuando i == 2, continue salta directamente al paso de actualización del bucle (i++), omitiendo el println. El bucle luego vuelve a comprobar su condición y continúa con i == 3.
Cómo reanudan los bucles
El comportamiento depende del tipo de bucle:
for— ejecuta la expresión de actualización y luego comprueba la condiciónwhile— comprueba la condición inmediatamentedo/while— comprueba la condición inmediatamente (al final del bucle)formejorado — avanza al siguiente elemento
Un continue en un while que olvida avanzar el estado puede convertirse rápidamente en un bucle infinito:
int i = 0;
while (i < 5) {
if (i == 2) {
continue; // i never advances — infinite loop!
}
System.out.println(i);
i++;
}Este es un error clásico. O bien incrementa antes del continue, o utiliza un bucle for para que el paso de actualización se ejecute automáticamente.
Filtrado de elementos
El uso más común de continue es "omitir los elementos que no me interesan":
int[] nums = {3, 7, 2, 8, 5, 4};
for (int n : nums) {
if (n % 2 != 0) {
continue; // skip odd numbers
}
System.out.println(n);
}Salida: 2 8 4.
continue vs. invertir la condición
A menudo puedes reescribir un continue como un if que envuelve el resto del cuerpo:
for (int n : nums) {
if (n % 2 == 0) {
System.out.println(n);
}
}Funcionalmente idéntico. La elección es una cuestión de estilo:
- Usa
continuecuando hay múltiples condiciones de omisión; una serie de guardas de salida temprana es más plana que losifprofundamente anidados. - Usa un
ifenvolvente cuando la condición de omisión es simple y el cuerpo es corto.
// 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 solo omite un nivel
Al igual que break, continue afecta al bucle envolvente más interno:
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);
}
}Salida:
0,0
0,2
1,0
1,2
2,0
2,2Para aplicar continue al bucle externo desde dentro del interno, usa un continue con etiqueta — tratado en sentencias etiquetadas.
Un ejemplo trabajado
Qué sigue
Cuando combinas bucles for, obtienes bucles anidados — la base para trabajar con cuadrículas, tablas y arrays bidimensionales.