13. Ejercicios y actividades
UD3 — Control de Flujo y Depuración · RA3 — Escribe y depura código, analizando y utilizando las estructuras de control del lenguaje
IES Thiar — Pilar de la Horadada (Alicante) · Curso 2026-2027
| 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 |
| Tecnología base | Java 25 LTS (OpenJDK Temurin 25) — IntelliJ IDEA Community Edition |
| Horas estimadas | ~4 h (de las 30 h de la UD3). |
Requisitos previos (lo que ya sabes): todas las secciones de UD3, 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 UD3 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.
13.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.ud3.
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 |
13.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.ud3.
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 |
13.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.ud3.
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 |
13.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.ud3.
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 |
13.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.ud3.
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 |
13.6 Ejercicio 6: Gestor de notas con aserciones
Integra: secciones 5 (arrays), 6 (for clásico, Arrays), 7 (for-each), 9 (try-catch), 11 (assert)
Enunciado:
Escribe un programa que gestione las notas de 5 alumnos:
- Pide las 5 notas al usuario (decimales entre 0 y 10) con
while + try-catchpara validar entrada. - Almacena las notas en un array
double[]. - Calcula la media, el máximo y el mínimo con
for-each. - Ordena las notas con
Arrays.sort. - Muestra las notas ordenadas con
Arrays.toString. - Cuenta cuántos alumnos han aprobado (nota >= 5) y cuántos han suspendido.
- Aserciones: incluye las siguientes:
- Precondición: el array no es
nully tiene al menos 1 elemento. - Postcondición: la media está entre 0 y 10.
- Postcondición: el máximo está entre 0 y 10.
- Activa
-eaen VM options para que las aserciones funcionen.
Requisitos:
- Usa
try-catchconNumberFormatExceptionpara validar que la entrada es numérica. - Usa
ifpara validar el rango [0, 10] de cada nota. - Usa
for-eachpara calcular media, máximo y mínimo (tres bucles separados). - Usa
assertcon mensaje en las tres aserciones. - Define constantes (
final int NUM_ALUMNOS = 5,final double NOTA_MIN = 0.0,final double NOTA_MAX = 10.0,final double NOTA_APROBADO = 5.0).
Ejemplo de ejecución:
Entrega: archivo GestorNotas.java en el paquete jams.programacion.ud3.
Rúbrica:
| Criterio | Descripción | Puntos |
|---|---|---|
| CE 3.5 | Array double[]: declaración, recorrido |
2 |
| CE 3.2 | for-each para media, máximo, mínimo |
2 |
| CE 3.4 | try-catch para validar entrada |
2 |
| CE 3.9 | assert de precondición y postcondición |
2 |
| CE 3.7 | Código comentado y constantes | 2 |
13.7 Prueba objetiva RA3
Duración: 120 minutos.
Material permitido: Ninguno (sin apuntes, sin internet, sin IntelliJ).
Formato:
La prueba objetiva RA3 consta de dos partes:
Parte A: Preguntas teóricas (30% de la nota)
- 10 preguntas tipo test (similar al test de la sección 12).
- 5 preguntas de respuesta breve (definir conceptos, explicar diferencias).
- Cubre todas las secciones 1-11 de UD3.
Parte B: Ejercicio práctico (70% de la nota)
Un ejercicio de programación en papel que integra:
- Selección (
if / else if / elsey/oswitch). - Iteración (
while,do-while,forofor-each). - Arrays (declaración, recorrido, acceso por índice).
- Excepciones (
try-catchconNumberFormatExceptionpara validar entrada). - Sentencias de salto (
breakocontinue).
El alumno debe escribir el código completo en papel, sin ayuda del IDE. Se valora:
| Criterio | Descripción | Puntos |
|---|---|---|
| CE 3.1 | Estructuras de selección correctas | 15 |
| CE 3.2 | Estructuras de repetición correctas | 15 |
| CE 3.3 | Sentencias de salto correctas | 10 |
| CE 3.4 | Control de excepciones con try-catch |
15 |
| CE 3.5 | Programa ejecutable y funcional | 10 |
| CE 3.6 | Prueba y depuración (identificar bugs en código dado) | 10 |
| CE 3.7 | Código comentado y legible | 10 |
| CE 3.8 | Creación de excepciones (identificar cuándo es apropiado) | 5 |
| CE 3.9 | Aserciones (identificar precondiciones y postcondiciones) | 10 |
Para aprobar la prueba objetiva: la nota media de todos los criterios debe ser igual o superior a 5. Si algún criterio tiene menos de 4,5, no se hace media.
13.8 Resumen de ejercicios
| Ejercicio | Integra | Dificultad | Entrega |
|---|---|---|---|
| 1. Adivina el número | S2, S4, S9 | Baja | AdivinaNumero.java |
| 2. Calculadora robusta | S2, S3, S4, S8, S9 | Media | CalculadoraRobusta.java |
| 3. Validación de formulario | S2, S4, S9 | Media | ValidacionFormulario.java |
| 4. Operaciones sobre arrays | S5, S6, S7, S10 | Media-Alta | OperacionesArrays.java |
| 5. Recorrido de matrices | S5, S6, S7, S8 | Alta | RecorridoMatrices.java |
| 6. Gestor de notas con aserciones | S5, S6, S7, S9, S11 | Alta | GestorNotas.java |
| Prueba objetiva RA3 | Todo UD3 | Examen | En aula (120 min) |
13.9 Cierre de la unidad
Con esta sección termina la Unidad Didáctica 3 — Control de Flujo y Depuración. Has aprendido:
- Conceptos de control de flujo y diagramas (sección 1).
- Selección con
if / else if / elseyswitchexpression (secciones 2-3). - Iteración con
while,do-while,forclásico yfor-each(secciones 4, 6, 7). - Arrays unidimensionales y matrices bidimensionales (secciones 5, 8).
- Bucles anidados y sentencias de salto
break,continue,return(sección 8). - Manejo de excepciones con
try-catch-finallyytry-with-resources(sección 9). - Depuración con IntelliJ IDEA: breakpoints, Step Over/Into/Out, Evaluate Expression (sección 10).
- Aserciones con
assert: precondiciones, postcondiciones e invariantes de bucle (sección 11). - Test de repaso global (sección 12).
- Ejercicios integradores que combinan todo lo anterior (esta sección).
Lo que viene después de UD3
UD3 se completa en la segunda evaluación (las primeras secciones se ven en la primera evaluación). Después de UD3, el siguiente bloque es:
- UD2 — POO con la API de Java (RA2): aprenderás qué son las clases y los objetos, y usarás las clases predefinidas del API de Java (
Stringen profundidad,Math,Random,java.time,StringBuilder, wrappers,Objects). También verásString.matchescon expresiones regulares, que en UD3 no usamos. - UD4 — Clases y Objetos Propios (RA4): crearás tus propias clases, con encapsulación, constructores, herencia, records, enums y sealed classes. Aquí también crearás tus propias excepciones (
class MiExcepcion extends Exception), que en UD3 no pudimos ver porque necesitabas POO.
Lo que no se vio en UD3 y se verá después
| Concepto | Dónde se ve |
|---|---|
String.matches con regex |
UD2 (métodos de String) y UD6 (java.util.regex). |
Pattern matching con instanceof |
UD7 (POO Avanzada). |
| Switch con pattern matching y guards | UD7 (POO Avanzada). |
Excepciones propias (class ... extends Exception) |
UD4 (sección 10). |
Colecciones (List, Set, Map) |
UD6. |
for-each sobre colecciones |
UD6. |
StringBuilder para concatenación eficiente |
UD2. |
Scanner |
UD2 (mencionado, pero IO.readln() es la API principal). |
| JUnit (testing) | UD2 (intro), UD4 (profundización). |
IOException con ficheros |
UD5. |
SQLException con JDBC |
UD9. |
| Logging (SLF4J, Logback) | UD5 / profesional. |
Cierre del profesor. Has llegado al final de UD3. 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 UD2 y UD4) 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,assertpara bugs del programador,try-catchpara errores del usuario, 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 UD2, donde descubrirás qué hay detrás deString,Math,Randomy todas esas clases que has estado usando sin saber cómo funcionaban por dentro.