Java – El ciclo for

El for de Java tiene dos formas y conviene saber cuál toca: la de siempre, con contador, y el for-each, que recorre sin índices y es la que se usa el 90 % de las veces.

La forma clásica

for (inicialización; condición; incremento) {
    // sentencias
}

Las tres partes se ejecutan en este orden: la inicialización una sola vez al entrar, la condición antes de cada vuelta, y el incremento al final de cada vuelta.

for (int i = 0; i < 5; i++) {
    System.out.print(i + " ");
}
salida0 1 2 3 4

Empieza en 0 y termina en 4, no en 5: la condición es < 5, así que la vuelta con i == 5 ya no entra. Son cinco vueltas, y esa cuenta —empezar en cero y usar «menor que»— es la convención en Java, igual que en C, porque coincide con cómo se numeran las posiciones de un arreglo.

for (int i = 5; i > 0; i--) {
    System.out.print(i + " ");
}
salida5 4 3 2 1
La variable del for solo existe dentro del bucle. Si la declaras fuera —int i; for (i = 0; …)— sigue viva después, y eso a veces se quiere (para saber dónde se paró) pero casi nunca.

El for-each

int[] numeros = {1, 2, 3, 4, 5};
for (int n : numeros) {
    System.out.print(n * n + " ");
}
salida1 4 9 16 25

Se lee «para cada n de numeros». No hay índice, no hay condición y no hay manera de equivocarse con el último elemento. Funciona igual con listas y con cualquier cosa que implemente Iterable:

List<String> nombres = List.of("ana", "bruno", "clara");
for (String n : nombres) {
    System.out.print(n.toUpperCase() + " ");
}
salidaANA BRUNO CLARA

Lo que el for-each no puede hacer

int[] copia = {1, 2, 3};

for (int n : copia) n = 99;                             // no cambia nada
System.out.println(Arrays.toString(copia));

for (int k = 0; k < copia.length; k++) copia[k] = 99;   // esto sí
System.out.println(Arrays.toString(copia));
salida[1, 2, 3]
[99, 99, 99]

n es una copia del elemento, no el elemento. Asignarle algo no toca el arreglo. Si tienes que escribir en las posiciones, o saber en cuál estás, necesitas el for con índice; para todo lo demás, for-each.

El bucle infinito

for (;;) {
    System.out.println("hola");
}

Las tres partes son opcionales. Sin condición, no hay nada que se vuelva falso: el programa imprime hasta que lo pares con Ctrl+C. Se usa a propósito en bucles de servidor o de lectura, siempre con un break dentro que decide cuándo salir. while (true) hace exactamente lo mismo y se lee mejor.

Cuando no hace falta un bucle

System.out.println(IntStream.rangeClosed(1, 5).sum());
salida15

Si lo que estás haciendo es sumar, filtrar o transformar una colección entera, muchas veces un stream dice lo mismo en una línea y sin variable de control. No es más rápido —a menudo es un poco más lento— pero se lee como la frase que querías escribir.

Si quieres…Usa
Recorrer un arreglo o una listafor (T x : coleccion)
Saber en qué posición estásfor (int i = 0; i < n; i++)
Modificar el arreglo mientras recorresel for con índice
Repetir hasta que pase algowhile (true) con break
Sumar, filtrar o transformarun stream

Más información en inglés: The for 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.

2 comentarios en «Java – El ciclo for»

Deja un comentario