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.
También te puede interesar
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
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 lista | for (T x : coleccion) |
| Saber en qué posición estás | for (int i = 0; i < n; i++) |
| Modificar el arreglo mientras recorres | el for con índice |
| Repetir hasta que pase algo | while (true) con break |
| Sumar, filtrar o transformar | un 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.
hola!! me pueden ayuda a realizar un JFrame en netbeans que imprima del 0 al 100 en dos en dos
se los agradeceria mucho!!!
hola Edgar te recomiendo que visites mi canal de Youtube «Programmer Kenri» ahí encontrarás ejemplos de lo que buscas