Ejercicio 4: Lanzamiento y Propagación
Enunciado
Realiza un método que introduzca números enteros en una lista. Invoca este método desde un main.
A continuación programa que se lance una excepción cuando al método se le pasa un número que ya está contenido en la lista. Deberá construirse la excepción con un mensaje descriptivo.
Después, adapta la firma del método para indicar que este método puede propagar la excepción que hemos lanzado.
Finalmente, captura la excepción dentro del main, imprimiendo la traza y el mensaje que lleva dicha excepción.
Solución
En este ejercicio ponemos en práctica dos conceptos clave de la gestión de errores en Java: lanzar (throw) una excepción manualmente cuando se incumple una regla de nuestro programa (números repetidos) y propagarla (throws) para que sea el método principal quien se encargue de gestionarla con un bloque try-catch.
package Tema7.Ejercicios.ejercicio4;
import java.util.Scanner;
public class Ejercicio4 {
public static void main(String[] args) {
try {
agregarNumeros();
} catch (IllegalArgumentException e) {
// Se captura la excepción propagada y se muestra su mensaje
System.out.println(e.getMessage());
}
}
// El método avisa en su firma (throws) que puede lanzar esta excepción
private static void agregarNumeros() throws IllegalArgumentException {
int[] lista = new int[5];
lista[0] = 0;
lista[1] = 12;
lista[2] = 20;
lista[3] = 13;
lista[4] = 40;
Scanner scanner = new Scanner(System.in);
System.out.print("Introduce un número para comprobar si está en la lista: ");
int numero = scanner.nextInt();
// Lanzamiento manual de la excepción si el número ya existe
if (estaEnLista(lista, numero)) {
throw new IllegalArgumentException("El numero ya esta en la lista");
}
System.out.println("Lista de números:");
for (int e : lista) {
System.out.println(e);
}
scanner.close(); // Buena práctica: cerrar el scanner
}
// Método auxiliar para comprobar repeticiones
private static boolean estaEnLista(int[] lista, int numero) {
for (int e : lista) {
if (e == numero) {
return true;
}
}
return false;
}
}