Bucle for y for-each en Java: Explicación Completa

¿Qué es un bucle for en Java?

Un bucle for es una estructura de control en Java que permite repetir un bloque de código un número determinado de veces. Es ideal para situaciones en las que conoces de antemano cuántas veces necesitas ejecutar el bloque de código.

Sintaxis del bucle for

for (inicialización; condición; actualización) {
    // bloque de código a ejecutar
}

Por ejemplo:

for (int i = 0; i < 5; i++) {
    System.out.println("Valor de i: " + i);
}

Ejemplos del bucle for

Recorrer un arreglo

int[] numeros = {10, 20, 30, 40};
for (int i = 0; i < numeros.length; i++) {
    System.out.println(numeros[i]);
}

Calcular la suma de los primeros 100 números

int suma = 0;
for (int i = 1; i <= 100; i++) {
    suma += i;
}
System.out.println("Suma: " + suma);

Este código implementa la fórmula de la suma de una progresión aritmética:

\[ \text{Suma} = \frac{n(n+1)}{2} \]

¿Qué es un bucle for-each?

El bucle for-each es una forma simplificada de recorrer colecciones y arreglos en Java. Se introdujo en Java 5 y es especialmente útil cuando no necesitas el índice de los elementos.

for (tipo elemento : colección) {
    // bloque de código a ejecutar
}

Por ejemplo:

String[] frutas = {"Manzana", "Banana", "Cereza"};
for (String fruta : frutas) {
    System.out.println(fruta);
}

Diferencias clave entre for y for-each

  • for te da control completo sobre el índice y permite modificar los elementos.
  • for-each es más legible y seguro, pero no te permite modificar directamente el contenido del arreglo si es un tipo primitivo.
  • for-each no permite saltar elementos con facilidad ni recorrer de forma inversa.

¿Cuándo usar cada tipo de bucle?

Usa for cuando:

  • Necesitas el índice.
  • Vas a modificar elementos del arreglo.
  • Requieres recorrer la colección en orden inverso o con pasos personalizados.

Usa for-each cuando:

  • Solo necesitas acceder a cada elemento.
  • Quieres un código más limpio y legible.

Buenas prácticas

  • Evita usar for cuando no necesitas el índice.
  • No modifiques colecciones dentro de un for-each directamente (puede lanzar ConcurrentModificationException).
  • Usa nombres descriptivos para las variables de bucle.
  • Considera usar Streams en Java 8+ para operaciones complejas.