W3docs

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
4

Cuando 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ón
  • while — comprueba la condición inmediatamente
  • do/while — comprueba la condición inmediatamente (al final del bucle)
  • for mejorado — 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 continue cuando hay múltiples condiciones de omisión; una serie de guardas de salida temprana es más plana que los if profundamente anidados.
  • Usa un if envolvente 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,2

Para aplicar continue al bucle externo desde dentro del interno, usa un continue con etiqueta — tratado en sentencias etiquetadas.

Un ejemplo trabajado

java— editable, runs on the server

Qué sigue

Cuando combinas bucles for, obtienes bucles anidados — la base para trabajar con cuadrículas, tablas y arrays bidimensionales.

Práctica

Práctica
¿Qué imprime este bucle? for (int i = 0; i < 5; i++) { if (i == 2) continue; System.out.print(i); }
¿Qué imprime este bucle? for (int i = 0; i < 5; i++) { if (i == 2) continue; System.out.print(i); }
Was this page helpful?