Java – Uso de break y continue en el ciclo for y while

break sale del bucle. continue salta a la vuelta siguiente. Suena simple, y lo es, salvo por dos detalles: el continue en un while puede colgar el programa, y con etiquetas los dos pueden actuar sobre un bucle de fuera.

break

for (int i = 0; i < 10; i++) {
    if (i == 6) break;
    System.out.print(i + " ");
}
salida0 1 2 3 4 5

Al llegar a 6 se sale del bucle entero y sigue la línea de después. El 6 no se imprime, porque el break está antes del println.

continue

for (int i = 0; i < 10; i++) {
    if (i % 2 == 0) continue;
    System.out.print(i + " ");
}
salida1 3 5 7 9

continue no sale: abandona esta vuelta y va a la siguiente. En un for «la siguiente» incluye ejecutar el incremento, así que el bucle avanza con normalidad.

El continue que cuelga un while

int i = 0;
while (i < 10) {
    System.out.println("i: " + i);
    if (i == 2) continue;      // ¡se salta el i++ de abajo!
    i++;
}
Este programa no termina. En un while, el incremento es una línea más del cuerpo, y continue se la salta: al llegar a 2, vuelve arriba con i todavía en 2, comprueba la condición, entra otra vez, y así para siempre. Hay que pararlo con Ctrl+C. En el for esto no pasa porque el incremento vive en la cabecera del bucle y continue sí lo ejecuta.

Si necesitas continue en un while, incrementa antes:

int i = 0;
while (i < 10) {
    i++;
    if (i == 3) continue;
    System.out.print(i + " ");
}
salida1 2 4 5 6 7 8 9 10

Etiquetas: romper dos bucles a la vez

Un break normal solo sale del bucle que lo contiene. Cuando buscas algo dentro de una matriz y lo encuentras, lo que quieres es salir de los dos:

buscar:
for (int f = 0; f < 3; f++) {
    for (int c = 0; c < 3; c++) {
        if (f * 3 + c == 4) {
            System.out.println("encontrado en (" + f + "," + c + ")");
            break buscar;
        }
    }
}
salidaencontrado en (1,1)

La etiqueta es un nombre seguido de dos puntos, delante del bucle de fuera. break buscar; sale de ese bucle, no del de dentro. Con continue etiqueta pasa lo análogo: se va a la vuelta siguiente del bucle de fuera.

for (int f = 0; f < 3; f++) {
    for (int c = 0; c < 3; c++) {
        if (c == 1) continue;
        System.out.print(f + "" + c + " ");
    }
}
salida00 02 10 12 20 22
Las etiquetas son lo más parecido a un goto que tiene Java, y se usan poco a propósito. Si te hacen falta muchas, suele ser señal de que ese bucle doble pide salir a un método aparte: ahí un return hace el mismo trabajo y se entiende mejor.
Quieres…Usa
Dejar de iterar del todobreak
Saltarte esta vueltacontinue
Salir de un bucle de fuerabreak etiqueta
Lo mismo, pero siguiendocontinue etiqueta
Salir del método enteroreturn

Más información en inglés: Break and continue in Java.

Todo el código se compiló y se ejecutó con Java 25 LTS en un contenedor limpio antes de publicar esta página; las salidas están copiadas de esa ejecución.