Java – El ciclo while

El while repite mientras se cumpla una condición. El do-while hace lo mismo pero comprueba al final, así que entra siempre al menos una vez. Esa es toda la diferencia, y decide cuál usar.

while

int i = 0;
while (i < 5) {
    System.out.print("i:" + i + " ");
    i++;
}
salidai:0 i:1 i:2 i:3 i:4

Tres piezas, y las tres tienen que estar: la variable se prepara antes de entrar, la condición se comprueba al principio de cada vuelta, y algo dentro del bucle tiene que acercar la condición a hacerse falsa. Aquí es i++.

Si olvidas el i++, el programa no se cuelga: se queda imprimiendo para siempre. Es el fallo clásico del while y la razón por la que, cuando el número de vueltas se sabe de antemano, conviene un for: ahí el incremento va en la misma línea que la condición y es más difícil olvidarlo.

do-while

do {
    // sentencias
} while (condición);

Fíjate en el punto y coma del final: ahí sí hace falta.

La diferencia, con un ejemplo

int j = 100;
while (j < 5) {
    System.out.println("esto no se imprime");
    j++;
}
System.out.println("el while no entró ni una vez, j sigue en " + j);

int k = 100;
do {
    System.out.println("el do-while sí entra, k vale " + k);
    k++;
} while (k < 5);
salidael while no entró ni una vez, j sigue en 100
el do-while sí entra, k vale 100

Con la misma condición falsa, el while no ejecuta el cuerpo ninguna vez y el do-while lo ejecuta una. De ahí sale la regla: do-while cuando el trabajo hay que hacerlo al menos una vez para poder decidir si hay que repetirlo. El caso típico es pedir un dato por teclado: primero lo pides, y luego ya puedes comprobar si es válido.

int opcion;
do {
    IO.println("Elige 1, 2 o 3");
    opcion = Integer.parseInt(IO.readln());
} while (opcion < 1 || opcion > 3);

Cuando no sabes cuántas vueltas son

Ese es el territorio natural del while: leer hasta que se acabe el archivo, consumir una cola hasta vaciarla, reintentar hasta que funcione.

String linea;
while ((linea = lector.readLine()) != null) {
    System.out.println(linea);
}

La asignación dentro de la condición parece un truco sucio, pero es idiomática en Java desde siempre: lee una línea, la guarda y compara con null en la misma expresión. Los paréntesis de alrededor son obligatorios, porque != tiene más prioridad que =.

Si…Usa
Sabes cuántas vueltas sonfor
Repites mientras pase algowhile
Hay que ejecutar al menos una vezdo-while
Lees hasta que se acabe la entradawhile con la asignación en la condición

Más información en inglés: The while loop 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.