Saltar al contenido principal

Bucles for en Java

Hasta ahora hemos visto cómo hacer que un programa tome decisiones utilizando if, else, switch y operadores lógicos.

Pero hay otra situación muy habitual:

¿Qué ocurre si queremos repetir una misma acción varias veces?

Por ejemplo:

System.out.println("Hola");
System.out.println("Hola");
System.out.println("Hola");
System.out.println("Hola");
System.out.println("Hola");

Podríamos escribir todas las instrucciones manualmente, pero esto no es práctico.

Para repetir código utilizamos los bucles.


1. ¿Qué es un bucle?

Un bucle es una estructura que permite repetir un bloque de código varias veces.

Por ejemplo, imaginemos que queremos mostrar por consola la frase "Hola" 5 veces. Con lo que sabemos ahora mismo haríamos:

System.out.println("Hola");
System.out.println("Hola");
System.out.println("Hola");
System.out.println("Hola");
System.out.println("Hola");

Este código mostrará:

Hola
Hola
Hola
Hola
Hola

Esto puede ser muy tedioso si la intrucción la queremos repetir 100, 1000, 10000 de veces...

Con los bucles reduciríamos el código a simplemente:

for (int i = 0; i < 5; i++) {

System.out.println("Hola");

}

Ahora explicaremos paso a paso las partes del for.


2. Estructura básica de un for

La estructura de un for es:

for (inicio; condicion; incremento) {

// Código que se repite

}

Por ejemplo en:

for (int i = 0; i < 5; i++) {

System.out.println("Hola");

}

El for tiene tres partes principales:

for (inicio; condición; incremento)
↓ ↓ ↓
¿Dónde ¿Cuándo ¿Cómo
empieza? continúa? cambia?

Vamos a estudiar cada una.


3. La inicialización

La primera parte del for indica dónde empieza el contador.

Por ejemplo:

int i = 0

Sigue siempre la estructura:

int i = inicio

Normalmente la variable siempre se llama i, que viene del concepto "variable iteradora".

Por ejemplo en:

for (int i = 0; i < 5; i++) {

System.out.println("Hola");

}

Estamos indicando que vamos a empezar a contar desde 0.:

i = 0

¿Por qué empezamos desde 0?

Como vimos en lecciones anteriores, en Java se empieza a contar desde 0, por lo que si queremos repetir algo 5 veces le diremos que empiece desde 0 (y no desde 1). Esto ocurre siempre.

Esa variable i es muy imporante comprender que empezará valiendo, en este caso, 0 (por int i = 0) e irá cambiando su valor en cada iteración. Veremos cómo lo hace en los siguientes apartados pero lo más común será:

Primera iteración: i = 0
Segunda iteración: i = 1
Tercera iteración: i = 2
...

Ya que es una variable que se autoincrementa, como verás en el apartado 5.

4. La condición

La segunda parte del for indica hasta cuándo queremos repetir el código.

En nuestro ejemplo:

i < 5

Java comprobará esta condición antes de cada repetición.

Mientras sea true, el código se ejecutará.

Por ejemplo:

i = 0 → ¿0 < 5? → true
i = 1 → ¿1 < 5? → true
i = 2 → ¿2 < 5? → true
i = 3 → ¿3 < 5? → true
i = 4 → ¿4 < 5? → true
i = 5 → ¿5 < 5? → false

Cuando la condición es false, el bucle termina.

Norma general:

Como norma general si queremos contar hasta X número, la condición siempre será:

i < X

5. El incremento

La tercera parte indica cómo cambia el contador después de cada repetición.

En nuestro ejemplo:

i++

i++ significa:

i = i + 1;

Por tanto, el contador va aumentando:

0
1
2
3
4
5

Cuando llega a 5, la condición:

i < 5

deja de cumplirse y el bucle termina.


6. El funcionamiento completo

Tenemos:

for (int i = 0; i < 5; i++) {

System.out.println("Hola");

}

Java realiza los siguientes pasos:

Paso 1

Crea el contador:

int i = 0;

Paso 2

Comprueba:

i < 5

Como:

0 < 5

es true, ejecuta el código:

System.out.println("Hola");

Paso 3

Ejecuta:

i++;

Ahora:

i = 1

Paso 4

Vuelve a comprobar:

1 < 5

como es true, ejecuta el código otra vez:

System.out.println("Hola");

Este proceso continúa hasta que:

i = 5

En ese momento:

5 < 5

es false.

El bucle termina.

En resumen...

Cuando queremos repetir un código X veces SIEMPRE haremos el bucle así:

for (int i = 0; i < X; i++) {

// Código que se repite

}

7. Mostrar los números del 0 al 4

El bucle sirve para repetir una intrucción X veces, pero también podemos utilizarlo para mostrar el valor de la i.:

for (int i = 0; i < 5; i++) {
// Motramos aquí la i
System.out.println(i);

}

Resultado:

0
1
2
3
4

Observa que el 5 no aparece.

Esto ocurre porque cuando i vale 5:

i < 5

es falso.


8. Mostrar los números del 1 al 5

Si queremos empezar en 1:

for (int i = 1; i <= 5; i++) {

System.out.println(i);

}

Resultado:

1
2
3
4
5

Aquí utilizamos:

i <= 5

en lugar de:

i < 5

La diferencia es importante.

i < 5

permite:

0, 1, 2, 3, 4

Mientras que:

i <= 5

permite:

1, 2, 3, 4, 5

9. El contador puede empezar en cualquier valor

No tenemos que empezar necesariamente en 0 o 1.

Por ejemplo:

for (int i = 5; i <= 10; i++) {

System.out.println(i);

}

Resultado:

5
6
7
8
9
10

También podemos empezar en 10:

for (int i = 10; i <= 15; i++) {

System.out.println(i);

}

Resultado:

10
11
12
13
14
15

10. Incrementar de diferentes formas

Hasta ahora hemos utilizado:

i++

que aumenta el contador en 1.

Pero podemos utilizar otros incrementos.

Por ejemplo:

i = i + 2
for (int i = 0; i <= 10; i = i + 2) {

System.out.println(i);

}

Resultado:

0
2
4
6
8
10

También podemos utilizar:

i += 2

que significa lo mismo:

i = i + 2;

Por tanto:

for (int i = 0; i <= 10; i += 2) {

System.out.println(i);

}

produce:

0
2
4
6
8
10

11. Decrementar

También podemos hacer que el contador disminuya.

Para ello utilizamos:

i--

que equivale a:

i = i - 1;

Por ejemplo:

for (int i = 5; i >= 1; i--) {

System.out.println(i);

}

Resultado:

5
4
3
2
1

En este caso:

i >= 1

indica que continuamos mientras i sea mayor o igual que 1.


13. Utilizar operadores dentro de un for

Podemos utilizar los operadores que ya conocemos dentro de un bucle.

Por ejemplo:

for (int i = 1; i <= 5; i++) {

System.out.println(i * 2);

}

Resultado:

2
4
6
8
10

En cada repetición Java calcula:

1 * 2
2 * 2
3 * 2
4 * 2
5 * 2

14. Utilizar if dentro de un for

Una de las combinaciones más importantes es utilizar un if dentro de un for.

Por ejemplo, podemos mostrar solamente los números pares entre 1 y 10:

for (int i = 1; i <= 10; i++) {

if (i % 2 == 0) {

System.out.println(i);

}

}

Resultado:

2
4
6
8
10

El for recorre los números:

1, 2, 3, 4, 5, 6, 7, 8, 9, 10

Y el if comprueba:

i % 2 == 0

Solamente cuando la condición es verdadera se muestra el número.


15. Utilizar String dentro de un for

Los bucles no solamente sirven para trabajar con números.

También podemos repetir operaciones relacionadas con String.

Por ejemplo:

String nombre = "Maria";

for (int i = 0; i < 5; i++) {

System.out.println("Hola " + nombre);

}

Resultado:

Hola Maria
Hola Maria
Hola Maria
Hola Maria
Hola Maria

También podemos utilizar métodos de String para recorrer las letras de una palabra con el bucle.

Por ejemplo:

String palabra = "Java";

for (int i = 0; i < palabra.length(); i++) {

System.out.println(palabra.charAt(i));

}

Resultado:

J
a
v
a

Aquí estamos utilizando el contador para trabajar con las posiciones de un String, diciendole que empieza en la primera posición de la palabra (int i = 0) y termine en la última posición de la palabra (i < palabra.length()).

Aunque todavía no hemos visto arrays, los String tienen posiciones internas y podemos acceder a ellas mediante charAt().


16. for y Scanner

También podemos combinar un for con Scanner.

Por ejemplo, podemos pedir al usuario cinco nombres:

Scanner scanner = new Scanner(System.in);

for (int i = 1; i <= 5; i++) {

System.out.print("Introduce un nombre: ");

String nombre = scanner.nextLine();

System.out.println("Hola " + nombre);

}

El programa repetirá cinco veces:

Introduce un nombre:

El usuario puede introducir diferentes nombres.

Por ejemplo:

Introduce un nombre: Dolores
Hola Dolores

Introduce un nombre: Juan
Hola Juan

Introduce un nombre: María
Hola María

El for controla cuántas veces pedimos información al usuario.


17. for con una condición introducida por el usuario

Podemos utilizar el valor introducido por Scanner para controlar qué ocurre dentro del bucle.

Por ejemplo:

Scanner scanner = new Scanner(System.in);

System.out.print("Introduce un número: ");

int numero = scanner.nextInt();

for (int i = 1; i <= numero; i++) {

System.out.println(i);

}

Si el usuario introduce:

5

obtenemos:

1
2
3
4
5

Si introduce:

10

obtenemos:

1
2
3
4
5
6
7
8
9
10

El número de repeticiones depende ahora de la información proporcionada por el usuario.


18. Calcular una suma con un for

Podemos utilizar una variable para acumular resultados.

Por ejemplo, queremos calcular la suma de los números del 1 al 5.

Primero creamos una variable para almacenar la suma:

int suma = 0;

Siempre esa variable suma se inicializará a 0, ya que al principio del código aún no sabemos qué resultado dará la suma.

Después utilizamos el for del 1 al 5:

for (int i = 1; i <= 5; i++) {

suma = suma + i;

}

Observa que la instrucción que se repite dentro del bucle es:

suma = suma + i;

Esto ocurre porque lo que queremos es ir modificando la variable suma incrementando su valor añadiéndole la i, que como sabemos equivale a los números del 1 al 5 de uno en uno.

Lo que le ocurre internamente a la variable suma es:

suma = 0
suma = 0 + 1 = 1
suma = 1 + 2 = 3
suma = 3 + 3 = 6
suma = 6 + 4 = 10
suma = 10 + 5 = 15

Finalmente, y fuera del bucle ya que no sabemos la solución final hasta haber terminado el bucle:

System.out.println(suma);

Resultado:

15

El proceso es:

suma = 0

i = 1 → suma = 0 + 1 → 1
i = 2 → suma = 1 + 2 → 3
i = 3 → suma = 3 + 3 → 6
i = 4 → suma = 6 + 4 → 10
i = 5 → suma = 10 + 5 → 15

19. Contar elementos con un for

También podemos utilizar una variable como contador, en lugar de como acumulador.

El ejemplo anterior sumaba los números del 1 al 5 (1 + 2 + 3 + 4 + 5 = 15). Ahora no queremos sumar valores sino contar cuántas veces ocurre algo.

Por ejemplo, imaginemos que queremos saber cuántos números pares hay del 1 al 10.

Al igual que antes empezaríamos inicializando una variable a 0, ya que aún no podemos saber el resultado:

int contador = 0;

Ahora empezaremos el bucle del 1 al 10. Y, muy importante, dentro del bucle evaluaremos la condición (en este caso si el número i es par) y incrementaremos el contador en 1 simulando que hemos encontrado un número más que cumple dicha condición.


for (int i = 1; i <= 10; i++) {

if (i % 2 == 0) {

contador++;

}

}

System.out.println(contador);

Resultado:

5

¿Por qué?

Porque entre 1 y 10 hay cinco números pares:

2
4
6
8
10

Cada vez que encontramos uno, hacemos:

contador++;

Por lo que el contador evoluciona así:

contador = 0 + 1 + 1 + 1 + 1 + 1 = 5

20. break

La instrucción break permite salir inmediatamente de un bucle, ya que por defecto el bucle continua hasta el final.

Por ejemplo, imagina que queremos ver el primer número par que hay del 1 al 10:

for (int i = 1; i <= 10; i++) {

if (i % 2 == 0) {

break;

}

System.out.println(i);

}

Resultado:

2

Cuando i es un número par, se ejecuta:

break;

y el bucle termina inmediatamente.


21. continue

También existe la instrucción:

continue;

continue hace que Java salte directamente a la siguiente repetición del bucle sin ejecutar el resto del código de dentro.

Por ejemplo, queremos mostrar todos los números del 1 al 5 menos el 3:

for (int i = 1; i <= 5; i++) {

if (i == 3) {

continue;

}

System.out.println(i);

}

Resultado:

1
2
4
5

Cuando i vale 3, se ejecuta:

continue;

Por tanto, Java no ejecuta:

System.out.println(i);

y pasa a la siguiente repetición.


22. Resumen

El bucle for nos permite repetir código de una forma controlada.

Su estructura básica es:

for (inicio; condicion; incremento) {

// Código

}

Por ejemplo:

for (int i = 1; i <= 5; i++) {

System.out.println(i);

}

Las tres partes principales son:

int i = 1

INICIO
i <= 5

CONDICIÓN
i++

INCREMENTO

El funcionamiento general es:

1. Crear el contador

2. Comprobar la condición

3. Ejecutar el código

4. Modificar el contador

5. Volver a comprobar la condición

6. Repetir hasta que sea falsa

Además, podemos combinar for con todo lo que hemos aprendido hasta ahora:

for
├── variables
├── operadores
├── String
├── Scanner
├── if / else
├── switch
└── funciones

Por ejemplo:

Scanner scanner = new Scanner(System.in);

System.out.print("¿Cuántos números quieres introducir? ");

int cantidad = scanner.nextInt();

int suma = 0;

for (int i = 1; i <= cantidad; i++) {

System.out.print("Introduce el número " + i + ": ");

int numero = scanner.nextInt();

if (numero > 0) {

suma += numero;

}

}

System.out.println("La suma de los números positivos es: " + suma);

En este ejemplo estamos combinando:

  • Scanner para obtener información del usuario.
  • Variables para guardar los datos.
  • Un for para repetir una acción.
  • Un if para tomar una decisión.
  • Operadores como <=, > y +=.
  • System.out.println() para mostrar el resultado.

Esto nos permite empezar a construir programas mucho más dinámicos que los que hacíamos al principio.