10 Ejercicios resueltos de bucles en Java (for, while, do-while)
¿Te encuentras escribiendo el mismo código una y otra vez? ¡Los bucles en Java son la solución! Descubre cómo automatizar tareas repetitivas con for
, while
y do-while
a través de ejemplos prácticos y ejercicios diseñados para reforzar tu aprendizaje. ¡Prepárate para llevar tu lógica de programación al siguiente nivel!
Aprendizaje Teórico: Entendiendo los Bucles en Java
Antes de sumergirnos en la práctica, repasemos brevemente qué son los bucles y los tres tipos principales que usaremos en Java:
- ¿Qué son los Bucles? Los bucles (o ciclos) son estructuras de control que nos permiten ejecutar un bloque de código múltiples veces. Son fundamentales para tareas como recorrer listas de datos, realizar cálculos repetitivos o esperar a que se cumpla una condición.
- Bucle
for
:- Ideal para: Situaciones donde sabes exactamente cuántas veces necesitas repetir el bloque de código.
- Sintaxis básica:
for (inicialización; condición; actualización) { // Código a repetir }
- Funcionamiento:
- Se ejecuta la
inicialización
(normalmente, declarar e inicializar un contador). - Se evalúa la
condición
. Si es verdadera, se ejecuta el código dentro del bucle. Si es falsa, el bucle termina. - Se ejecuta el código dentro del bucle.
- Se ejecuta la
actualización
(normalmente, incrementar o decrementar el contador). - Se vuelve al paso 2.
- Se ejecuta la
- Bucle
while
:- Ideal para: Situaciones donde necesitas repetir el código mientras una condición sea verdadera, pero no sabes de antemano cuántas veces será.
- Sintaxis básica:
while (condición) { // Código a repetir }
- Funcionamiento:
- Se evalúa la
condición
. - Si es verdadera, se ejecuta el código dentro del bucle y se vuelve al paso 1.
- Si es falsa, el bucle termina. ¡Importante! Algo dentro del bucle debe eventualmente hacer que la condición sea falsa para evitar un bucle infinito.
- Se evalúa la
- Bucle
do-while
:- Ideal para: Similar al
while
, pero garantiza que el bloque de código se ejecute al menos una vez, independientemente de si la condición es verdadera o falsa inicialmente. - Sintaxis básica:
do { // Código a repetir } while (condición);
- Funcionamiento:
- Se ejecuta el código dentro del bucle primero.
- Se evalúa la
condición
. - Si es verdadera, se vuelve al paso 1.
- Si es falsa, el bucle termina.
- Ideal para: Similar al
¡Ahora que tenemos los conceptos claros, vamos a la práctica!
¡Manos a la Obra! Ejercicios Resueltos
Te animamos a que intentes resolver cada problema por tu cuenta antes de mirar la solución. ¡Es la mejor manera de aprender!
Ejercicio 1: Contando del 1 al 10
- Intenta Resolverlo Primero: Piensa en cómo usar un bucle para mostrar cada número desde 1 hasta 10 en la consola. ¿Qué tipo de bucle sería más adecuado si sabes exactamente cuántas veces quieres repetir la acción?
- Enunciado: Escribe un programa en Java que utilice un bucle
for
para imprimir los números enteros del 1 al 10, cada uno en una nueva línea. - Solución:
public class ContarHastaDiez {
public static void main(String[] args) {
System.out.println("Números del 1 al 10:");
// Usamos un bucle for porque sabemos el inicio (1) y el fin (10).
// i: nuestro contador, inicializado en 1.
// i <= 10: la condición que se verifica antes de cada iteración. El bucle continúa mientras i sea menor o igual a 10.
// i++: el incremento que se ejecuta después de cada iteración (aumenta i en 1).
for (int i = 1; i <= 10; i++) {
// Imprimimos el valor actual del contador en cada iteración.
System.out.println(i);
}
}
}
Ejercicio 2: Suma de los Primeros N Números Naturales
- Intenta Resolverlo Primero: ¿Cómo podrías acumular la suma de números en una variable mientras recorres desde 1 hasta un número N? Necesitarás una variable para guardar la suma total.
- Enunciado: Crea un programa que calcule la suma de los primeros 5 números naturales (1 + 2 + 3 + 4 + 5) usando un bucle
for
e imprima el resultado total. - Solución:
public class SumaNaturales {
public static void main(String[] args) {
int n = 5; // El número hasta el cual queremos sumar.
int suma = 0; // Variable para almacenar la suma acumulada, inicializada en 0.
// Bucle for para iterar desde 1 hasta n.
for (int i = 1; i <= n; i++) {
// En cada iteración, añadimos el valor actual de 'i' a la variable 'suma'.
suma = suma + i; // También se puede escribir como: suma += i;
}
// Imprimimos el resultado final después de que el bucle ha terminado.
System.out.println("La suma de los primeros " + n + " números naturales es: " + suma); // Salida: 15
}
}
Ejercicio 3: Tabla de Multiplicar
- Intenta Resolverlo Primero: Necesitas mostrar el resultado de multiplicar un número fijo (por ejemplo, 7) por los números del 1 al 10. ¿Cómo estructurarías el bucle para generar cada línea de la tabla?
- Enunciado: Escribe un programa que muestre la tabla de multiplicar del número 7 (del 7×1 al 7×10) usando un bucle
for
. - Solución:
public class TablaMultiplicar {
public static void main(String[] args) {
int numeroTabla = 7; // El número del cual queremos la tabla.
System.out.println("Tabla de multiplicar del " + numeroTabla + ":");
// Bucle for para iterar desde 1 hasta 10 (los multiplicadores).
for (int i = 1; i <= 10; i++) {
// Calculamos el resultado de la multiplicación en cada paso.
int resultado = numeroTabla * i;
// Imprimimos la línea de la tabla con formato.
System.out.println(numeroTabla + " x " + i + " = " + resultado);
}
}
}
Ejercicio 4: Números Pares hasta 20
- Intenta Resolverlo Primero: ¿Cómo puedes usar un bucle
while
para ir generando números y verificar si son pares? Recuerda que un número es par si el resto de dividirlo por 2 es 0. El bucle debe detenerse cuando el número supere 20. - Enunciado: Utiliza un bucle
while
para imprimir todos los números pares desde 2 hasta 20 (inclusive). - Solución:
public class NumerosParesWhile {
public static void main(String[] args) {
int numero = 2; // Empezamos con el primer número par.
System.out.println("Números pares hasta 20:");
// El bucle while continúa mientras 'numero' sea menor o igual a 20.
while (numero <= 20) {
// Imprimimos el número par actual.
System.out.println(numero);
// Incrementamos 'numero' en 2 para pasar al siguiente número par.
// Esto asegura que la condición (numero <= 20) eventualmente sea falsa.
numero = numero + 2; // o numero += 2;
}
}
}
Ejercicio 5: Adivina el Número (Simple)
- Intenta Resolverlo Primero: Imagina un juego simple donde el usuario tiene que adivinar un número secreto. El programa debe pedir números hasta que el usuario acierte. ¿Qué bucle usarías si necesitas que el código se ejecute al menos una vez (pedir el número) antes de comprobar si es correcto?
- Enunciado: Crea un programa que simule un juego de adivinar un número. Define un número secreto (ej: 42). Usa un bucle
do-while
para pedirle al usuario que ingrese un número hasta que adivine el número secreto. Muestra un mensaje de felicitación al final. (Nota: Para simplicidad, usaremos un valor fijo en lugar de entrada de usuario real aquí). - Solución: (Simulando entrada con una variable que cambia)
import java.util.Scanner; // Necesario para leer la entrada del usuario (aunque aquí lo simularemos)
public class AdivinaNumero {
public static void main(String[] args) {
int numeroSecreto = 42;
int numeroIngresado; // No necesita valor inicial aquí
Scanner scanner = new Scanner(System.in); // Objeto para leer entrada
System.out.println("¡Adivina el número secreto!");
// El bucle do-while ejecuta el bloque al menos una vez.
do {
// Pedimos al usuario que ingrese un número.
System.out.print("Ingresa un número: ");
numeroIngresado = scanner.nextInt(); // Lee el entero ingresado
// Comprobación opcional dentro del bucle (podría dar pistas)
if (numeroIngresado != numeroSecreto) {
System.out.println("Intenta de nuevo...");
}
// La condición se comprueba después de ejecutar el bloque.
// El bucle se repite mientras el número ingresado NO sea igual al secreto.
} while (numeroIngresado != numeroSecreto);
// Cuando el bucle termina, significa que el usuario adivinó.
System.out.println("¡Felicidades! ¡Has adivinado el número secreto (" + numeroSecreto + ")!");
scanner.close(); // Buena práctica cerrar el Scanner.
}
}
(Nota: Para ejecutar esto, necesitarás compilar y correr el código en un entorno Java e ingresar números en la consola)
Ejercicio 6: Calculadora de Factorial
- Intenta Resolverlo Primero: El factorial de un número N (N!) es el producto de todos los enteros positivos desde 1 hasta N. Por ejemplo, 5! = 5 * 4 * 3 * 2 * 1 = 120. ¿Cómo usarías un bucle para calcular esto? Necesitarás una variable para ir acumulando el producto.
- Enunciado: Escribe un programa que calcule el factorial de un número dado (ej: 5) usando un bucle
for
owhile
. Imprime el resultado. - Solución (usando
for
):
public class Factorial {
public static void main(String[] args) {
int numero = 5; // Número del cual calcular el factorial.
long factorial = 1; // Usamos long para evitar desbordamiento con números grandes. Se inicializa en 1.
// Verificamos si el número es 0 o 1, cuyo factorial es 1.
if (numero < 0) {
System.out.println("El factorial no está definido para números negativos.");
} else if (numero == 0) {
System.out.println("El factorial de 0 es: 1");
} else {
// Bucle for para multiplicar desde el número hacia abajo hasta 1.
// También podría ser for (int i = 1; i <= numero; i++) { factorial *= i; }
for (int i = numero; i >= 1; i--) {
factorial = factorial * i; // Acumulamos el producto. factorial *= i;
}
System.out.println("El factorial de " + numero + " es: " + factorial); // Salida: 120
}
}
}
Ejercicio 7: Imprimir un Triángulo de Asteriscos
- Intenta Resolverlo Primero: Para formar un triángulo, necesitas imprimir una cantidad creciente de asteriscos en cada línea. Esto sugiere usar un bucle dentro de otro (bucles anidados). El bucle exterior controlará las filas, y el interior controlará cuántos asteriscos imprimir en cada fila.
- Enunciado: Crea un programa que use bucles anidados (
for
dentro defor
) para imprimir el siguiente patrón de asteriscos:
*
**
***
****
*****
Solución:
public class TrianguloAsteriscos {
public static void main(String[] args) {
int altura = 5; // Número de filas del triángulo.
System.out.println("Triángulo de asteriscos:");
// Bucle externo: controla las filas (desde 1 hasta la altura).
for (int i = 1; i <= altura; i++) {
// Bucle interno: controla los asteriscos en la fila actual.
// Imprime 'i' asteriscos en la fila 'i'.
for (int j = 1; j <= i; j++) {
System.out.print("*"); // Usamos print para que los asteriscos queden en la misma línea.
}
// Después de imprimir los asteriscos de una fila, hacemos un salto de línea.
System.out.println(); // Equivalente a System.out.print("\n");
}
}
}
Ejercicio 8: Suma de Elementos de un Array
- Intenta Resolverlo Primero: Tienes un conjunto de números almacenados en una estructura llamada array. ¿Cómo recorrerías cada elemento del array usando un bucle y sumarías sus valores?
- Enunciado: Dado un array de números enteros
int[] numeros = {3, 7, 2, 8, 4};
, calcula la suma de todos sus elementos usando un buclefor
e imprime el total. - Solución:
public class SumaArray {
public static void main(String[] args) {
int[] numeros = {3, 7, 2, 8, 4}; // Nuestro array de ejemplo.
int suma = 0; // Variable para acumular la suma.
// Bucle for para recorrer el array.
// 'i' actúa como índice, desde 0 hasta el último índice válido (numeros.length - 1).
// numeros.length nos da la cantidad de elementos en el array.
for (int i = 0; i < numeros.length; i++) {
// Accedemos al elemento en la posición 'i' usando numeros[i].
// Sumamos el elemento actual a la suma total.
suma += numeros[i]; // suma = suma + numeros[i];
}
System.out.println("La suma de los elementos del array es: " + suma); // Salida: 24
}
}
Nota: Java también tiene un bucle
for-each
simplificado para esto:for (int numero : numeros) { suma += numero; }
, pero nos centramos en los bucles básicos aquí.
Ejercicio 9: Encontrar el Primer Múltiplo de 5 y 7
- Intenta Resolverlo Primero: Necesitas empezar a contar desde 1 y detenerte tan pronto como encuentres un número que sea divisible tanto por 5 como por 7. ¿Qué bucle usarías si no sabes cuántos números tendrás que probar? ¿Cómo comprobarías la divisibilidad?
- Enunciado: Escribe un programa que encuentre el primer número entero positivo que sea divisible por 5 y por 7 al mismo tiempo, usando un bucle
while
. Imprime ese número. - Solución:
public class PrimerMultiploComun {
public static void main(String[] args) {
int numero = 1; // Empezamos a probar desde 1.
// Usamos un bucle while(true) que se ejecutará indefinidamente
// hasta que encontremos el número y usemos 'break' para salir.
while (true) {
// Verificamos si el número actual es divisible por 5 Y por 7.
// El operador '%' (módulo) da el resto de una división. Si es 0, es divisible.
if (numero % 5 == 0 && numero % 7 == 0) {
System.out.println("El primer número divisible por 5 y 7 es: " + numero);
break; // Salimos del bucle while una vez encontrado el número.
}
// Si no es el número buscado, pasamos al siguiente.
numero++; // ¡Fundamental para evitar un bucle infinito!
}
// La ejecución continúa aquí después del break.
}
}
Ejercicio 10: Invertir una Cadena de Texto
- Intenta Resolverlo Primero: Dada una palabra, ¿cómo podrías construir una nueva cadena que contenga los caracteres de la original pero en orden inverso? Podrías recorrer la cadena original desde el último carácter hasta el primero y añadir cada carácter a la nueva cadena.
- Enunciado: Escribe un programa que tome una cadena de texto (ej: «Hola») y la invierta usando un bucle
for
. Imprime la cadena invertida. - Solución:
public class InvertirCadena {
public static void main(String[] args) {
String original = "Hola";
String invertida = ""; // Cadena vacía para construir la invertida.
// Bucle for que recorre la cadena original desde el último carácter al primero.
// Los índices de una cadena van de 0 a longitud-1.
// Empezamos en el último índice: original.length() - 1.
// Continuamos mientras el índice sea mayor o igual a 0.
// Decrementamos el índice en cada paso: i--.
for (int i = original.length() - 1; i >= 0; i--) {
// Obtenemos el carácter en la posición 'i' usando charAt(i).
// Concatenamos (añadimos) ese carácter al final de la cadena 'invertida'.
invertida = invertida + original.charAt(i); // invertida += original.charAt(i);
}
System.out.println("Cadena original: " + original);
System.out.println("Cadena invertida: " + invertida); // Salida: aloH
}
}
Preguntas Frecuentes
¿Cuál es la diferencia principal entre while
y do-while
?
La diferencia clave está en cuándo se evalúa la condición. El bucle while
comprueba la condición antes de ejecutar el código del bucle por primera vez. Si la condición es falsa desde el inicio, el código nunca se ejecuta. El bucle do-while
, en cambio, ejecuta el código del bucle al menos una vez y luego comprueba la condición al final. Se usa cuando necesitas garantizar que la acción se realice como mínimo una vez.
¿Cómo puedo evitar bucles infinitos?
Un bucle infinito ocurre cuando la condición de salida del bucle nunca se cumple. Para evitarlo:
En bucles while
y do-while
: Asegúrate de que dentro del bucle haya alguna instrucción que modifique la variable(s) involucrada(s) en la condición, de forma que eventualmente la condición se vuelva falsa. Por ejemplo, si la condición es contador < 10
, asegúrate de incrementar contador
dentro del bucle.
En bucles for
: Generalmente son menos propensos a ser infinitos si se usan correctamente, pero asegúrate de que la condición de terminación sea alcanzable por la variable de control y su actualización (ej: si incrementas i
, la condición debe ser i < N
o i <= N
, no i > N
si i
empieza bajo).
Uso de break
: Puedes usar la sentencia break;
dentro de cualquier bucle para forzar su salida inmediata si se cumple una condición específica, lo que puede ser un mecanismo de seguridad adicional.
¡Felicidades por llegar hasta aquí! Has explorado los bucles for
, while
y do-while
en Java y has visto cómo aplicarlos en diversos escenarios prácticos. Dominar los bucles es un paso crucial para escribir código eficiente y resolver problemas complejos.
Recuerda que la clave está en la práctica constante. No te desanimes si algún ejercicio te costó más; cada desafío superado fortalece tu lógica de programación. ¡Sigue codificando y experimentando!
¿Te ha gustado este tutorial? ¡Hay mucho más por aprender! Visita nuestro blog para encontrar más artículos, tutoriales y ejercicios sobre Java y otros temas de programación. ¡Te esperamos para seguir creciendo juntos en este emocionante mundo del desarrollo!