Los ciclos for y while permiten ejecutar un bloque de código múltiples veces sin escribirlo repetidamente.
En programación, repetir una acción de forma automática se llama iteración. Los ciclos son la herramienta principal para lograrlo.
Estructura del ciclo for
El ciclo for se usa cuando sabes de antemano cuántas veces quieres repetir algo.
Su estructura es:
for (inicialización; condición; actualización) {
// código que se repite
}
Cada parte tiene una función específica:
| Parte | Descripción | Ejemplo |
|---|---|---|
| Inicialización | Declara el contador. Se ejecuta una sola vez. | int i = 0 |
| Condición | Se revisa antes de cada repetición. Si es false, el ciclo termina. |
i < 10 |
| Actualización | Modifica el contador después de cada repetición. | i++ |
Ejemplo 1: Imprimir números de turno en FEMSA
Supón que necesitas generar los números de turno del 1 al 5 para una línea de producción en FEMSA.
for (int turno = 1; turno <= 5; turno++) {
System.out.println("Turno número: " + turno);
}
Salida:
Turno número: 1
Turno número: 2
Turno número: 3
Turno número: 4
Turno número: 5
El ciclo arranca con turno = 1. Cada vez que termina, suma 1 (turno++). Cuando turno llega a 6, la condición turno <= 5 es false y el ciclo se detiene.
Ejemplo 2: Calcular el total de ventas en Liverpool
Tienes 4 vendedoras en una sucursal de Liverpool. Quieres sumar todas sus ventas del día.
int[] ventas = {12500, 18000, 9750, 21300};
int total = 0;
for (int i = 0; i < ventas.length; i++) {
total = total + ventas[i];
}
System.out.println("Total de ventas del día: $" + total);
Salida:
Total de ventas del día: $61,550
ventas.length devuelve el tamaño del arreglo (4). El índice i recorre posiciones 0, 1, 2 y 3. Cada vuelta suma el valor de esa posición al acumulador total.
El ciclo for-each para recorrer colecciones
Java ofrece una versión simplificada del for llamada for-each. Es ideal cuando solo necesitas leer cada elemento sin modificar el índice.
for (tipo variable : arreglo) {
// usa la variable
}
Ejemplo: Listar empleados de Bimbo
String[] empleados = {"Ana", "Carlos", "Fernanda", "Miguel"};
for (String nombre : empleados) {
System.out.println("Empleado: " + nombre);
}
Salida:
Empleado: Ana
Empleado: Carlos
Empleado: Fernanda
Empleado: Miguel
No necesitas manejar el índice i. Java avanza automáticamente por cada elemento.
Estructura del ciclo while
El ciclo while se usa cuando no sabes cuántas veces se repetirá el código. Se ejecuta mientras una condición sea true.
while (condición) {
// código que se repite
}
A diferencia del for, tú controlas manualmente el contador o la variable que cambia la condición.
Ejemplo 3: Procesar pedidos en Mercado Libre
Un sistema de Mercado Libre procesa pedidos pendientes hasta que no quede ninguno.
int pedidosPendientes = 8;
while (pedidosPendientes > 0) {
System.out.println("Procesando pedido. Pendientes: " + pedidosPendientes);
pedidosPendientes--;
}
System.out.println("Todos los pedidos fueron procesados.");
Salida:
Procesando pedido. Pendientes: 8
Procesando pedido. Pendientes: 7
...
Procesando pedido. Pendientes: 1
Todos los pedidos fueron procesados.
Cada iteración reduce pedidosPendientes en 1 con pedidosPendientes--. Cuando llega a 0, la condición es false y el ciclo termina.
Ejemplo 4: Acumular el salario mensual hasta superar una meta
Un empleado de FEMSA gana $18,500 al mes. Quieres saber cuántos meses necesita para ahorrar $100,000.
int salario = 18500;
int ahorro = 0;
int meses = 0;
int meta = 100000;
while (ahorro < meta) {
ahorro = ahorro + salario;
meses++;
}
System.out.println("Meses para alcanzar la meta: " + meses);
System.out.println("Ahorro acumulado: $" + ahorro);
Salida:
Meses para alcanzar la meta: 6
Ahorro acumulado: $111,000
El ciclo suma el salario cada mes hasta que el ahorro supera $100,000. El resultado muestra 6 meses y un acumulado de $111,000.
for vs while: ¿cuál usar?
| Situación | Ciclo recomendado |
|---|---|
| Sabes exactamente cuántas repeticiones necesitas | for |
| Recorres un arreglo o lista de tamaño fijo | for o for-each |
| La condición depende de un evento externo o variable | while |
| No sabes cuántas veces se repetirá | while |
| Quieres código más corto para leer colecciones | for-each |
Ciclos anidados
Puedes poner un ciclo dentro de otro. Esto se llama ciclo anidado.
Ejemplo: Reporte de ventas por sucursal y por semana
String[] sucursales = {"CDMX", "Monterrey", "Guadalajara"};
for (int s = 0; s < sucursales.length; s++) {
for (int semana = 1; semana <= 2; semana++) {
System.out.println("Sucursal: " + sucursales[s] + " | Semana: " + semana);
}
}
Salida:
Sucursal: CDMX | Semana: 1
Sucursal: CDMX | Semana: 2
Sucursal: Monterrey | Semana: 1
Sucursal: Monterrey | Semana: 2
Sucursal: Guadalajara | Semana: 1
Sucursal: Guadalajara | Semana: 2
El ciclo externo avanza por cada sucursal. El ciclo interno recorre las semanas por cada sucursal.
Errores comunes
1. Olvidar actualizar el contador en un while
Si no modificas la variable dentro del while, la condición nunca cambia y el ciclo corre para siempre. Esto se llama ciclo infinito.
// ¡INCORRECTO! Ciclo infinito
int x = 0;
while (x < 5) {
System.out.println(x);
// Falta x++ aquí
}
Siempre verifica que el ciclo tenga una forma de terminar.
2. Usar el índice incorrecto en arreglos
En Java, los arreglos empiezan en el índice 0, no en 1. Si usas i <= ventas.length, Java lanzará un error ArrayIndexOutOfBoundsException.
// ¡INCORRECTO!
for (int i = 0; i <= ventas.length; i++) { ... }
// CORRECTO
for (int i = 0; i < ventas.length; i++) { ... }
3. Modificar el arreglo dentro de un for-each
El for-each solo sirve para leer elementos. Si intentas modificar el arreglo con él, el cambio no se guarda.
// Esto NO modifica el arreglo original
for (int v : ventas) {
v = v + 100; // Solo modifica la copia local
}
Para modificar elementos, usa el for clásico con índice.
4. Confundir = con == en la condición
Usar = dentro de la condición del ciclo es un error de asignación, no de comparación. Usa siempre ==, <, > u otros operadores relacionales.
// ¡INCORRECTO!
while (x = 5) { ... }
// CORRECTO
while (x < 5) { ... }
Resumen de sintaxis
// Ciclo for clásico
for (int i = 0; i < n; i++) { /* código */ }
// Ciclo for-each
for (Tipo elemento : colección) { /* código */ }
// Ciclo while
while (condición) { /* código */ }
Con estas tres formas puedes resolver la mayoría de los problemas de repetición en Java.