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
Stringtienen posiciones internas y podemos acceder a ellas mediantecharAt().
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:
Scannerpara obtener información del usuario.- Variables para guardar los datos.
- Un
forpara repetir una acción. - Un
ifpara 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.