12. Ejercicios y actividades
UD2 — Control de Flujo y Depuración · RA3 — Escribe y depura código, analizando y utilizando las estructuras de control del lenguaje
| Aspecto | Valor |
|---|---|
| Resultado de aprendizaje | RA: 3 — Escribe y depura código, analizando y utilizando las estructuras de control del lenguaje. |
| Criterios de evaluación a los que contribuye esta sección | CE 3.1 · CE 3.2 · CE 3.3 · CE 3.4 · CE 3.5 · CE 3.6 · CE 3.7 · CE 3.8 · CE 3.9 (todos los criterios de RA3). |
| Marco normativo | RD 405/2023 · RD 450/2010 · RD 659/2023 |
| Marco normativo | RD 405/2023 · RD 450/2010 · RD 659/2023 |
| Tecnología base | Java 25 LTS (OpenJDK Temurin 25) — IntelliJ IDEA Community Edition |
| Horas estimadas | ~4 h (de las 30 h de la UD2). |
Requisitos previos (lo que ya sabes): todas las secciones de UD2, de la 1 a la 12. Has completado el test de repaso de la sección 12. Si has fallado más de 2 preguntas en algún bloque del test, repasa esa sección antes de hacer los ejercicios de este bloque.
Cómo usar esta sección: los ejercicios están ordenados por dificultad creciente. Cada ejercicio indica qué secciones de UD2 integra. Al final de cada ejercicio hay una rúbrica de evaluación con los criterios que se valoran. La prueba objetiva RA3 (120 min, sin material) es el ejercicio final que cierra la unidad.
12.1 Ejercicio 1: Mini-juego "adivina el número"
Integra: secciones 2 (if), 4 (while), 9 (try-catch)
Enunciado:
Escribe un programa que genere un número aleatorio entre 1 y 100 (usando (int)(Math.random() * 100) + 1) y le pida al usuario que lo adivine. En cada intento, el programa responde "mayor", "menor" o "¡Has acertado en X intentos!". El juego termina cuando el usuario acierta o escribe "0" para rendirse.
Requisitos:
- Usa
while (true) + breakpara el bucle principal. - Usa
try-catchconNumberFormatExceptionpara validar que el usuario escribe un número. - Si el usuario escribe "0", muestra el número secreto y termina.
- Usa
if / else if / elsepara comparar el intento con el número secreto. - Cuenta los intentos con un acumulador.
- Usa constantes (
final int) para el mínimo (1) y máximo (100).
Ejemplo de ejecución:
Entrega: archivo AdivinaNumero.java en el paquete jams.programacion.ud2.
Rúbrica:
| Criterio | Descripción | Puntos |
|---|---|---|
| CE 3.2 | Bucle while correcto con break |
2 |
| CE 3.1 | if / else if / else correcto |
2 |
| CE 3.4 | try-catch con NumberFormatException |
2 |
| CE 3.5 | Programa ejecutable y funcional | 2 |
| CE 3.7 | Código comentado y legible | 2 |
12.2 Ejercicio 2: Calculadora robusta con menú y excepciones
Integra: secciones 2 (if), 3 (switch), 4 (do-while), 8 (break, continue), 9 (try-catch)
Enunciado:
Escribe una calculadora con un menú interactivo que se repite hasta que el usuario elija "salir". El menú ofrece: sumar, restar, multiplicar y dividir. En cada operación, pide dos operandos (pueden ser decimales). Si el usuario escribe algo que no es un número, el programa muestra un error y vuelve a pedir el dato (no se cae).
Requisitos:
- Usa
do-whilepara el menú principal (se muestra al menos una vez). - Usa
switchexpression para ejecutar la operación elegida. - Usa
while + try-catchconNumberFormatExceptionpara pedir los operandos de forma robusta (volver a pedir si no es un número). - Controla la división por cero con un
if (b == 0). - Usa
continuesi el usuario elige una opción no válida (vuelve al menú sin pedir operandos). - Usa
breakcuando el usuario elija "salir". - Usa
IO.readln()yreplace(',', '.')para aceptar decimales con coma o punto. - Define constantes (
final int) para las opciones del menú.
Ejemplo de ejecución:
Entrega: archivo CalculadoraRobusta.java en el paquete jams.programacion.ud2.
Rúbrica:
| Criterio | Descripción | Puntos |
|---|---|---|
| CE 3.2 | Bucle do-while para el menú |
2 |
| CE 3.1 | switch expression correcto |
2 |
| CE 3.4 | try-catch robusto para operandos |
2 |
| CE 3.3 | break y continue usados correctamente |
1 |
| CE 3.5 | Programa ejecutable y funcional | 2 |
| CE 3.7 | Código comentado y legible | 1 |
12.3 Ejercicio 3: Sistema de validación de formulario
Integra: secciones 2 (if), 4 (while), 9 (try-catch)
Enunciado:
Escribe un programa que pida al usuario los siguientes datos y los valide uno a uno (volviendo a pedir si son incorrectos):
| Campo | Validación |
|---|---|
| Nombre | No vacío, máximo 50 caracteres. |
| Edad | Entero entre 0 y 120. |
| Debe contener "@". | |
| Altura (metros) | Decimal entre 0.5 y 2.5. |
Al final, muestra todos los datos introducidos en un resumen formateado.
Requisitos:
- Usa
while + try-catchpara validar la edad y la altura (pueden fallar conNumberFormatException). - Usa
ifcon.isEmpty(),.length(),.contains("@")para validar nombre y email. - Define constantes (
final) para todos los límites (longitud máxima, edad mínima/máxima, altura mínima/máxima). - Cada campo se pide en un bucle separado: no avanza hasta que sea válido.
- Muestra el resumen final con
String.formatpara los decimales.
Ejemplo de ejecución:
Entrega: archivo ValidacionFormulario.java en el paquete jams.programacion.ud2.
Rúbrica:
| Criterio | Descripción | Puntos |
|---|---|---|
| CE 3.2 | Bucles while para validar cada campo |
2 |
| CE 3.1 | if con validaciones de rango y contenido |
2 |
| CE 3.4 | try-catch para edad y altura |
2 |
| CE 3.5 | Programa ejecutable y funcional | 2 |
| CE 3.7 | Código comentado y constantes bien nombradas | 2 |
12.4 Ejercicio 4: Operaciones sobre arrays
Integra: secciones 5 (arrays), 6 (for clásico, Arrays), 7 (for-each), 10 (depuración)
Enunciado:
Dado un array de 10 enteros introducidos por el usuario, realiza las siguientes operaciones:
- Pedir los 10 números al usuario y guardarlos en un array (con
while + try-catchpara validar entrada). - Mostrar el array con
Arrays.toString. - Sumar todos los elementos con
for-each. - Calcular el máximo y el mínimo con
forclásico. - Buscar un número (pedido al usuario) con
forclásico ybreakal encontrarlo. - Ordenar el array con
Arrays.sorty mostrarlo conArrays.toString. - Buscar un número en el array ordenado con
Arrays.binarySearch.
Requisitos:
- Importa
java.util.Arrays. - Usa
for-eachpara sumar (noforclásico). - Usa
forclásico para buscar (necesitas el índice parabreak). - Define constantes para el tamaño del array.
- Depura el programa con IntelliJ: pon un breakpoint en la línea de la suma y verifica que el acumulador cambia correctamente en cada iteración.
Ejemplo de ejecución:
Entrega: archivo OperacionesArrays.java en el paquete jams.programacion.ud2.
Rúbrica:
| Criterio | Descripción | Puntos |
|---|---|---|
| CE 3.5 | Arrays: declaración, recorrido, modificación | 2 |
| CE 3.2 | for-each para suma, for clásico para búsqueda |
2 |
| CE 3.3 | break al encontrar el elemento |
1 |
| CE 3.4 | try-catch para validar entrada |
2 |
| CE 3.6 | Depuración con breakpoint en la suma | 2 |
| CE 3.7 | Código comentado | 1 |
12.5 Ejercicio 5: Recorrido de matrices
Integra: secciones 5 (arrays), 6 (for clásico), 7 (for-each), 8 (bucles anidados, matrices int[][])
Enunciado:
Dada una matriz int[][] de 4 filas × 5 columnas con valores introducidos en el código, realiza:
- Mostrar la matriz con dos
foranidados (formato tabla con\t). - Sumar todos los elementos con
for-eachanidado (externo + interno). - Calcular la suma de cada fila y mostrarla.
- Buscar un elemento (pedido al usuario) en la matriz y mostrar su posición
(fila, columna)o "No está". Usabreaketiquetado para salir de los dos bucles. - Calcular el máximo de toda la matriz.
Requisitos:
- La matriz se define con valores literales en el código (no se pide al usuario).
- Para mostrar la matriz:
forclásico externo (filas) +forclásico interno (columnas). - Para sumar todos:
for-eachexterno (cada fila esint[]) +for-eachinterno (cada valor). - Para buscar:
forclásico externo +forclásico interno +break etiquetado. - Para el máximo:
for-eachanidado, inicializando conmatriz[0][0].
Ejemplo de ejecución:
Entrega: archivo RecorridoMatrices.java en el paquete jams.programacion.ud2.
Rúbrica:
| Criterio | Descripción | Puntos |
|---|---|---|
| CE 3.5 | Matrices int[][]: declaración y acceso |
2 |
| CE 3.2 | Bucles anidados (for clásico y for-each) | 2 |
| CE 3.3 | break etiquetado para búsqueda |
2 |
| CE 3.7 | Código comentado | 2 |
| CE 3.6 | Depuración: verificar suma con breakpoint | 2 |
Cierre de la unidad. Has llegado al final de UD2. Es la unidad más grande y más importante del módulo de Programación: todo lo que viene después (POO, colecciones, ficheros, bases de datos, JavaFX) se basa en lo que has aprendido aquí. Si dominas las estructuras de control (selección, iteración, salto), los arrays, las excepciones y la depuración, tienes el 70 % del camino andado para ser un programador Java profesional. El otro 30 % es POO (que verás en UD 3 y UD 4) y las APIs específicas (colecciones, ficheros, bases de datos). La regla más importante que te llevas de toda la unidad es:
<no<=conlength, for-each lee, for clásico escribe y Step Over (F8) por defecto en el depurador. Si interiorizas esas cuatro reglas, vas a programar mejor que el 80 % de los que empiezan. Nos vemos en UD 3, donde descubrirás qué hay detrás deString,Math,Randomy todas esas clases que has estado usando sin saber cómo funcionaban por dentro.