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.
También te puede interesar
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++.
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 son | for |
| Repites mientras pase algo | while |
| Hay que ejecutar al menos una vez | do-while |
| Lees hasta que se acabe la entrada | while 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.