java-bucles-for-while-foreach

Bucles en Java: for, while, do-while y for-each

  • 4 min

Un bucle es una estructura que repite un bloque de código mientras se cumpla una condición.

A los seres humanos se nos da fatal repetir tareas. Si te pido que escribas 1.000 veces “No tiraré papeles al suelo”, al quinto intento te habrás aburrido y al décimo cometerás un error.

A los ordenadores, sin embargo, les encanta. Pueden repetir una tarea millones de veces sin cansarse y sin equivocarse.

Para conseguir esto, en programación utilizamos los Bucles (o ciclos). Hoy vamos a ver las herramientas que Java nos da para la repetición: desde los clásicos que heredó de C, hasta las versiones modernas y seguras.

El bucle while

Es el bucle más sencillo. Mientras la condición sea verdadera, repite.

Se evalúa la condición antes de entrar. Si la condición es falsa desde el principio, el código de dentro nunca se ejecutará.

int contador = 0;

while (contador < 5) {
    System.out.println("Contando: " + contador);
    contador++; // ¡Importante! Si olvidas esto, tendrás un bucle infinito
}
Copied!

Si la condición nunca pasa a ser false (por ejemplo, olvidas incrementar el contador), el programa se quedará “colgado” eternamente consumiendo el 100% de tu CPU hasta que lo mates.

El bucle do-while

Es el hermano rebelde del while. La diferencia fundamental es que la condición se evalúa al final.

Esto garantiza que el código del interior se ejecutará al menos una vez, independientemente de si la condición es cierta o falsa.

Es muy útil para menús de usuario, donde primero quieres mostrar las opciones y luego preguntar si quiere salir.

Scanner sc = new Scanner(System.in);
int opcion;

do {
    System.out.println("1. Jugar");
    System.out.println("0. Salir");
    opcion = sc.nextInt();
} while (opcion != 0);

System.out.println("Fin del juego");
Copied!

El bucle for clásico

Cuando sabemos de antemano cuántas veces queremos repetir algo (por ejemplo, “de 0 a 100”), el while se queda un poco desordenado.

El bucle for empaqueta toda la lógica de control en una sola línea. Es el estándar de la industria para contadores.

Sintaxis: for (inicialización; condición; actualización)

//    Inicio  ;  Condición ; Paso
for (int i = 0; i < 5; i++) {
    System.out.println("Iteración número " + i);
}
Copied!
  1. int i = 0: Se ejecuta una sola vez al principio. Crea la variable contadora.
  2. i < 5: Se comprueba antes de cada vuelta. Si es false, salimos.
  3. i++: Se ejecuta al final de cada vuelta.

Por convención histórica, las variables de los bucles suelen llamarse i, j, k. Si anidas bucles, usa nombres distintos para no liarte.

El bucle for-each

For each permite recorrer colecciones de datos (como Arrays o Listas).

Aunque veremos los Arrays en profundidad en el próximo artículo, quédate con esto: El for-each elimina la necesidad de manejar índices y contadores. Evita errores de “salirse del array”.

Se lee como: “Para cada nombre en listaDeNombres…”.

String[] nombres = {"Ana", "Luis", "Pedro"};

// Versión Clásica (Propensa a errores de índice)
for (int i = 0; i < nombres.length; i++) {
    System.out.println(nombres[i]);
}

// Versión For-Each (Limpia y segura)
for (String nombre : nombres) {
    System.out.println(nombre);
}
Copied!

Controlando el bucle: break y continue

A veces necesitamos alterar el flujo normal del ciclo.

Rompe el bucle inmediatamente. Deja de ejecutar y salta fuera. Se usa mucho para búsquedas: “Si encuentro lo que busco, dejo de buscar”.

for (int i = 0; i < 1000; i++) {
    if (i == 5) {
        System.out.println("Encontrado el 5. ¡Me voy!");
        break; // Sale del bucle, no llega a 1000
    }
}
Copied!

Detiene la iteración actual y salta a la siguiente comprobación/actualización. No se sale del bucle, solo se salta lo que queda de código en esa vuelta concreta.

for (int i = 0; i < 5; i++) {
    if (i == 2) {
        continue; // Se salta el print para el 2, pero sigue con el 3
    }
    System.out.println(i);
}
// Salida: 0, 1, 3, 4
Copied!