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).
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.

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.

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.
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.
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.

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.

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.