🖲️ Bucle for en Java
El bucle for es ideal cuando conoces (o puedes calcular) cuántas veces quieres repetir un bloque de código. Es compacto porque agrupa inicialización, condición y actualización en una sola línea.
🧱 Sintaxis básica
for (inicializador; condición; actualizador) {
// bloque de código
//cuerpo del bucle
}
//VARIANTES: Si solo tiene una sentencia en el cuerpo también
//se puede escribir sin llaves
for(inicializador; condición; modificador)
//sentencia;
for(inicializador; condición; modificador) //sentencia;
int i = 0;).
- Condición: si es true, entra/continúa; si es false, termina (p. ej., i < 5).
- Actualizador: se ejecuta al final de cada iteración (p. ej., i++).
🧯 Regla de oro: el índice debe avanzar hacia terminar el bucle; evita bucles infinitos o “atascos”.
🔍 Ejemplo: Mostrar del 0 al 4
for (int i = 0; i < 5; i++) {
System.out.println(i);
}
0
1
2
3
4
Traza rápida
| Iter. | i antes | i<5 | acción | i después |
|---|---|---|---|---|
| 1 | 0 | ✔ | imprime 0 | 1 |
| 2 | 1 | ✔ | imprime 1 | 2 |
| 3 | 2 | ✔ | imprime 2 | 3 |
| 4 | 3 | ✔ | imprime 3 | 4 |
| 5 | 4 | ✔ | imprime 4 | 5 |
| — | 5 | ✖ | termina | — |
🧭 Proceso
- Inicializador: inicializa y/o declara variables y se ejecuta solo una vez.
- Condición: se evalúa la condición. Si la condición es verdadera, se ejecuta el cuerpo del bucle for.
- Modificador: actualiza el valor de inicializador.
- La condición se evalúa nuevamente. El proceso continúa hasta que la condición es falsa.

⏫ Contar hacia arriba / ⏬ hacia abajo / ⏭️ saltos
// ↑ de 1 en 1
for (int i = 1; i <= 5; i++) { /* ... */ }
// ↓ de 1 en 1
for (int i = 5; i >= 1; i--) { /* ... */ }
// saltos de 2 en 2
for (int i = 0; i <= 10; i += 2) { /* ... */ }
🧩 Variantes útiles del for
1) 🔗 Múltiples variables
for (int i = 0, j = 10; i < j; i++, j--) {
System.out.println(i + " - " + j);
}
2) 🔁 for “sin partes” (estilo while)
int i = 0;
for ( ; i < 5; ) { // inicializador y actualizador vacíos
System.out.println(i);
i++;
}
3) 🧺 for-each (enhanced for) para colecciones/arrays
Este bucle lo veremos más adelante cuando veamos arrays y colecciones.
int[] notas = {7, 8, 9};
for (int n : notas) {
System.out.println(n);
}
✅ Más legible cuando no necesitas el índice.
⚠️ Sí, si necesitas el índice/posición, usa elforclásico.
📦 Iterar sobre cadenas
String s = "JAVA";
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
System.out.println("#" + i + ": " + c);
}
🎯 Filtros y contadores con if dentro del for
int pares = 0, impares = 0;
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
pares++;
} else {
impares++;
}
}
System.out.println("Pares=" + pares + ", Impares=" + impares);
🧭 Control de flujo: break y continue
for (int i = 1; i <= 10; i++) {
if (i == 7) break; // corta el bucle completo
if (i % 2 == 0) continue; // salta pares
System.out.print(i + " ");
}
// Salida: 1 3 5
🧠
breakrompe el bucle;continuesalta al siguiente ciclo.
🧪 Ejemplos prácticos
1) 📋 Tabla de multiplicar
int n = 7;
for (int i = 1; i <= 10; i++) {
System.out.printf("%d x %d = %d%n", n, i, n * i);
}
2) 🔎 Buscar el primer múltiplo de 7 en 1..100
int encontrado = -1;
for (int i = 1; i <= 100; i++) {
if (i % 7 == 0) { encontrado = i; break; }
}
System.out.println("Primero: " + encontrado);
3) 🧮 Suma dígitos de un número
//con un bucle while
public static void main(String[] args) {
int numero = 479; //4+7+9=20
int suma = 0;
int digito = 0;
while(numero > 0) {
digito = numero % 10;//obtengo el último dígito, menos significativo
suma += digito;
numero /= 10;//hago el número más pequeño, le quito el último dígito
}
System.out.println(suma);
}
//con un bucle for
public static void main(String[] args) {
int suma = 0;
int digito = 0;
for (int numero = 479; numero > 0; numero/=10) {
digito = numero % 10;
suma+=digito;
}
System.out.println(suma);
}
4) 🎲 Números aleatorios y conteo
int cuentaMayores = 0;
for (int i = 0; i < 100; i++) {
int n = (int)(Math.random() * 100) + 1; // 1..100
if (n > 50) cuentaMayores++;
}
System.out.println("Mayores que 50: " + cuentaMayores);
🧠 Errores típicos y cómo evitarlos 🚧
- ❌ Off‑by‑one: usar
<= lengthen vez de< length. - ❌ Modificar el índice dentro del cuerpo de forma confusa (además de
i++delfor). - ❌ Variable de control no coherente con la condición (sube cuando debería bajar).
- ❌ Si creo un bucle de la siguiente forma
for(int i = 0; i < 10; i++);ese bucle no hará nada, porque acaba en;. Con el;estamos indicando fin de statement o sentencia, es decir, fin de bucle, cualquier línea detrás del ; no será parte del bucle. Esto no solo se aplica para el buclefor, también para la sentenciaifowhile.
🧰 Debug rápido 🐞
- Imprime trazas:
System.out.println("i=" + i); - Valida límites antes de acceder:
if (i >= 0 && i < arr.length) { ... } - Revisa la condición y el actualizador: ¿se acercan al fin del bucle?
✅ Resumen exprés
fores perfecto cuando sabes cuántas iteraciones quieres.- Usa
< lengthcon arrays/Strings para evitar errores. for-eachsimplifica cuando no necesitas índice.break/continuete dan control fino del flujo.
🧩 Plantillas útiles (copia/pega)
// for clásico con índice
for (int i = 0; i < N; i++) { /* ... */ }
// recorrer array con índice
for (int i = 0; i < arr.length; i++) { /* ... */ }
// enhanced for
for (Tipo x : coleccion) { /* ... */ }
// contar hacia atrás
for (int i = N; i >= 0; i--) { /* ... */ }