El ciclo for
El ciclo for es una estructura de control de flujo repetitiva, que se caracteriza por ser un ciclo controlado por contador. En este artículo explicaré su funcionamiento, los elementos que lo componen y los errores comunes en su uso. Todo esto acompañado de ejemplos que incluyen algoritmos, programas en lenguajes Java y animaciones.
El ciclo controlado por contador.
El ciclo for es una estructura de control cíclica, también conocida como ciclo controlado por contador. Este ciclo es muy sencillo, ya que se conoce con exactitud cuántas veces se va a llevar a cabo la misma tarea.
Se define una variable de control, el contador, a la que se le incrementa o decrementa de uno en uno. La acción o acciones dentro del cuerpo del ciclo se repiten hasta que la variable de control llegue al valor final determinado en el encabezado del ciclo.
En español, la palabra for suele ser traducida como “para“, pero considero que, por su funcionamiento, y para usarlo dentro de un seudocódigo, la traducción más adecuada es “desde“. Y esto debido a que precisamente el comportamiento del ciclo se puede describir así: repetir n acciones desde que la variable de control tome el valor inicial hasta el valor final.
El ciclo for está disponible en casi todos los lenguajes de programación imperativa, pero con diferencias sustanciales en su sintaxis.
El ciclo for tradicional.
La sintaxis del ciclo for “tradicional” se puede observar en lenguajes de programación como Pascal, ALGOL, BASIC, Modula y Ada, entre otros. Para mostrar esta sintaxis, te presento la estructura del ciclo for usando el lenguaje de programación Pascal:
for i:= inicio to final do begin { cuerpo del ciclo } end
Dado que uno de los primeros lenguajes de programación en incluir la estructura cíclica for fue ALGOL, se considera a este tipo de sintaxis la esencia del ciclo for. Es decir, indicar únicamente los valores de inicio y de fin de la variable de control, y simplemente especificar si la variable se incrementará o decrementará. (En Pascal esto se logra con la palabra downto).
El ciclo for de Java
La sintaxis de la estructura cíclica for en el lenguaje Java no obedece a la sintaxis tradicional presentada en el apartado anterior. De hecho, utiliza la sintaxis del lenguaje C, teniendo un encabezado más complejo, pero que también ofrece más posibilidades que el tradicional. Más adelante describiré los componentes del encabezado de esta versión del ciclo for.
En la figura 1 te muestro la forma en la que se escribe este ciclo en tres notaciones: diagrama de flujo, seudocódigo y el lenguaje Java.

Figura 1. El ciclo for representado en las notaciones de diagrama de flujo, pseudocódigo y lenguaje Java.
Componentes del ciclo for.
Como todo ciclo, esta estructura de control cuenta con dos componentes: el encabezado y el cuerpo del ciclo. Pero es el encabezado en lenguaje Java el que presenta una composición interesante, la cual te muestro en la figura 2.

Figura 2. El encabezado del ciclo for
Como puedes ver, el encabezado se compone de tres partes:
- En la inicialización, se le debe asignar a la variable de control el valor inicial. También puede declararse a la variable inicial, una característica que explicaré más tarde.
- En la condición se establece el valor final de la variable de control, es decir, hasta dónde llegará. Típicamente en lenguajes de programación como Pascal, solo es necesario escribir el valor final. Pero en Java es necesario formar una expresión relacional, de tal forma que tiende a comportarse como un ciclo while: hacer esta acción mientras el valor de la variable de control llegue a tal límite.
- En la última parte se establece la forma en la que la variable de control cambiará su valor dentro del ciclo. Esto puede hacerse de una de dos formas: ya sea incrementando o decrementando el valor inicial. La forma en cómo se mueve la variable de control determina también el operador relacional usado en la condición fin, como se aprecia en la tabla de la figura 3:

Figura 3. Operadores usados en el encabezado del ciclo for.
Funcionamiento del ciclo for
El ciclo for funciona de la siguiente forma:
- El encabezado del ciclo configura el valor inicial de la variable de control y compara este valor para saber si la condición de fin es verdadera.
- Si la condición de fin es verdadera, permite el ingreso al cuerpo del ciclo, y por lo tanto se ejecutarán las acciones que se encuentran dentro de éste.
- Una vez que se han ejecutado las acciones del cuerpo del ciclo, la variable de control se incrementa o decrementa automáticamente según lo establecido en el encabezado del ciclo.
- Se evalúa si el nuevo valor de la variable de control aún sigue haciendo verdadera a la condición de fin
- Si la condición de fin aún es verdadera, se vuelve a ejecutar las acciones del cuerpo del ciclo.
- Si la condición de fin es falsa, ya no se puede entrar al cuerpo del ciclo y éste termina, de forma que el flujo de ejecución del programa continúa con las acciones que se encuentren fuera del cuerpo del ciclo, si es que existen.
Para ayudarte a comprender el funcionamiento de este ciclo a continuación te muestro una animación en la figura 4. Pero antes, considera el siguiente problema:
Elabore un programa para calcular cada uno de los valores de y en la ecuación: y=3x+5 donde x toma valores de 1 a 3, en incrementos de 1 en 1.

Figura 4. – Funcionamiento del ciclo for
A la derecha del algoritmo en notación de diagrama de flujo, puedes apreciar la prueba de escritorio, como sabes, una herramienta importantísima para trazar algoritmos y/o programas. Como puedes apreciar, cuando x toma el valor de 3, la condición x<=3 aún es verdadera, por lo que se tiene “permiso” para entrar y ejecutar el cuerpo del ciclo. Esto calcula otro valor de y (14). Después se incrementa x nuevamente, ahora valiendo 4. Pero 4 no hace verdadera la condición x<=3, por lo que el ciclo termina, y en este caso, también termina el programa.
La prueba de escritorio nos ayuda a rastrear los valores de las variables que intervienen en el ciclo, tanto del contador x, como de la variable y. Es importante que observes que el último valor de x no es 3, sino 4.
A continuación te presento el programa completo en Java.
/* * Ejemplo del ciclo for * Programa que calcula cada y en y=3x+5 para x=1..3 * * @author Gaby Nieva - dCodinGames */ public class EjemploFor { public static void main(String[] args) { int x, y; System.out.println("Programa que calcula cada y en y=3x+5 para x=1..3"); System.out.println(); System.out.println(" x y"); for (x=1; x<=3; x++){ y = 3 * x + 5; System.out.println(" " + x + " " + y); } } }
Y en la figura 5 te muestro la salida en pantalla de la ejecución de este programa.

Figura 5 – Salida del programa de ejemplo del ciclo for
Reglas del ciclo for.
La siguiente lista es una serie de observaciones que incluso pueden pasar como reglas que te ayudarán a utilizar de la forma adecuada la estructura for.
1. La variable de control puede ser de cualquier tipo de dato numérico:
El ciclo for tradicional sólo era capaz de utilizar contadores enteros (aunque el lenguaje Pascal sí era capaz de soportar contadores char). Pero el ciclo for moderno, heredado de C, admite cualquier tipo de dato numérico como float y double además de int. Además de estos tipos, el tipo char también es admitido como tipo de la variable de control, pero recuerda que en este caso estarás limitado por el tamaño que el tipo de datos te ofrece.
Entonces, por ejemplo, el siguiente fragmento de código se considera correcto:
for (double x1=0.1; x1<=3.5; x1++){ y1=3*x1+5; }
2. A la variable de control se le puede asignar incrementos o decrementos diferentes de 1.
Típicamente en el encabezado del ciclo for, para cambiar el valor de la variable de control, se utilizan los operadores de incremento ++ y decremento –. Esto puede llevar a pensar -erróneamente- que los incrementos/decrementos sólo deberán ser enteros, pero no es así. Esto era cierto para el ciclo for tradicional.
Sólo recuerda que, en caso de no querer usar los operadores mencionados, debes utilizar los operadores abreviados de asignación: +=, -=, *= o /=. El uso del operador de asignación simple (=), rompe la estructura del encabezado y genera un error de sintaxis. Por ejemplo, puedes observar que el siguiente programa es totalmente funcional, aunque la variable de control no es entera, ni el incremento es entero:
public class EjemploFor { public static void main(String[] args) { float x; for (x=1; x<=10.5; x+=0.5) System.out.println("Hola"); } }
3. Los limites superior e inferior pueden ser una constante numérica o simbólica, o una variable.
Puedes utilizar un valor numérico, como 10, 20 o 100, para definir cualquiera de los dos límites del ciclo. A los valores numéricos los llamamos constantes numéricas. O puedes utilizar constantes simbólicas, letras que representan un valor numérico que no puede cambiarse durante la ejecución del programa. Y también puedes utilizar variables para cualquiera de los dos límites.
Por ejemplo:
/* * Ejemplo de uso de constantes en el ciclo for. * * @author Gaby Nieva - dCodinGames.com */ public class Ejemplo2For { public static void main(String[] args) { final int INICIO = 0; int x, y=0, z; for (x=15; x>=INICIO; x--){ y = 2*x+12; System.out.println("x: " + x + " y: " + y); } for (x=y; x>=INICIO; x--){ z = 4+x+y; System.out.println("x: " + x + " z: " + z); } } }
En este programa:
- En el primer ciclo for se utiliza la constante numérica 15 para establecer el valor inicial del contador.
- Después se utiliza una constante simbólica (INICIO) para indicar el valor final del contador.
- En el segundo ciclo for, se utiliza el valor actual de la variable y para inicializar al contador x.
- Y nuevamente se utiliza una constante simbólica (INICIO) para indicar el valor final del contador.
4. La variable de control no debe modificarse dentro del cuerpo del ciclo, pues esto ocasionaría una alteración en el número de iteraciones.
Dado que el encabezado del ciclo ya tiene incluido la modificación de la variable de control (a diferencia del ciclo while) no debemos modificarla dentro del cuerpo del ciclo. Esto causaría una alteración del número de repeticiones que se desean, y puede pasar que el ciclo se repita menos veces de las que se necesita, o incluso, que entre en condición de ciclo infinito. Por ejemplo, considera el siguiente programa:
/* dCodinGames.com * Ejemplo del ciclo for * En este ciclo se modifica la variable de control dentro del cuerpo del ciclo * * @author Gaby Nieva - dCodinGames */ public class Ejemplo3For { public static void main(String[] args) { int x, y; System.out.println("Programa que calcula cada y en y=3x+5 para x=1..10"); System.out.println(); System.out.println(" x y"); for (x=1; x<=10; x++){ y = 3 * x + 5; System.out.println(" " + x + " " + y); x+=2; } } }
Observa como la última línea : x+=2 está modificando a la variable de control. Esto genera que se altere el número de veces que se debe calcular y, como se observa en la figura 6, pues en lugar de obtener 10 resultados, apenas se obtienen 4.

Figura 6 – Ciclo for al que se le modifica el contador dentro del cuerpo del ciclo.
5. Se puede declarar la variable de control dentro del encabezado del ciclo.
Debido a que en muchas ocasiones la variable de control sólo se utiliza para llevar la cuenta de las repeticiones que se deben realizar, puede ser descartable después de que el ciclo termina. Pero si se declara como variable local o global estará ocupando espacio de memoria, aun cuando ya no se utilice.
Este problema se resuelve si la variable de control se declara dentro del encabezado del ciclo. De este modo, sólo existirá mientras la condición del ciclo sea verdadera. Cuando ésta se vuelva falsa, la variable de control dejará de existir. Por ejemplo:
for (int i=y; i<= 100; x++){ z = 12 * i - y; System.out.println("i: " + i + " z: " + z); }
Sólo recuerda, que cualquier intento de utilizar la variable i fuera del cuerpo del ciclo, te generará un error de sintaxis, pues la variable es desconocida fuera del for (porque de hecho no está declarada).
6. No terminar el encabezado con ;.
Al igual que con el ciclo while, terminar el encabezado del ciclo for con ; impedirá que entre al cuerpo del ciclo. Como ya se ha comentado, el ; se utiliza para indicar que la instrucción ha terminado. Sin embargo, a diferencia del while, este error no genera un ciclo infinito, sino tan sólo un ciclo que no hace nada. Y esto es debido a que el encabezado incluye el avance de la variable de control, a diferencia de la estructura while.
Considera el siguiente código:
for ( i=1; i<=10; i++) ; System.out.println("i = " + i);
El ; al final del encabezado impedirá la ejecución de la impresión del valor de i dentro del ciclo. De esta forma, lo único que se ejecuta 10 veces es ; equivalente a nada. Como ya mencioné a diferencia del ciclo while, el valor de la variable de control cambia automáticamente, incrementándose. Por lo que el ciclo termina de ejecutar nada cuando el valor de i sea 11.
De esta forma, la salida que se apreciará en la consola será solamente el último valor de i, como te muestro en la figura 7.

Figura 7 – Ciclo for al que se le colocó ; al final del encabezado.
Como puedes apreciar, lo peor que puede sucederes que no se ejecuten las acciones del cuerpo del ciclo las veces requeridas. Pero a veces este problema puede generar errores de lógica más complicados de resolver.
Con esto conluyo mi explicación sobre el ciclo for. Recuerda que si tienes dudas, puedes escribirlas en los comentarios. Y si este artículo te ha parecido interesante, cómpartelo en tus redes sociales.
¡Hasta el próximo post!