10.3 THROWS / TRY / CATCH II

 Hola de nuevo, continuamos con los errores comprobados y no comprobados mediante otro ejemplo cuyo código es el siguiente:

package er;

 

import java.util.Scanner;

 

public class Entrada_datos {

 

      public static void main(String[] args) {

           

            System.out.println("¿Qué deseas hacer?");

            System.out.println("1. Introducir datos");

            System.out.println("2. Salir del programa");

           

            Scanner sc=new Scanner(System.in);

           

            int decision=sc.nextInt();

           

            if(decision==1) {

                 

                  pedirDatos();

            }else {

                 

                  System.out.println("Adiós");

                 

                  System.exit(0);

            }

           

            sc.close();

 

      }

     

      static void pedirDatos() {

           

            Scanner sc=new Scanner(System.in);

           

            System.out.println("Introduce tu nombre, por favor: ");

           

            String nombre_usuario=sc.next();

           

            System.out.println("Introduce tu edad, por favor: ");

           

            int edad_usuario=sc.nextInt();

           

            System.out.println("Hola "+nombre_usuario+" el año que viene tendrás "+(edad_usuario+1)+ " años");

           

            sc.close();

           

            System.out.println("Hemos terminado");

           

      }

 

}

Este programa hace lo siguiente, te da la opción de elegir dos opciones:



Si pulsamos en el 2 nos salimos del programa:



Si pulsamos en el 1 nos solicita el nombre y la edad:



El programa funciona correctamente, sin embargo, en este tipo de programas también se pueden cometer errores, por ejemplo, cuando nos solicita la edad en lugar de introducir un valor numérico introducimos texto nos da el siguiente error:



Nos da un error de tipo InputMismatchException lo primero que hay que revisar es si hereda de la clase IOException que son errores comprobamos o hereda de RuntimeException que son errores no comprobados. Si vamos a la API de Java comprobamos que este error hereda de la clase RuntimeException es un error no comprobado y que no estamos obligados a utilizar la estructura try… catch pero eso no quita que no lo pueda utilizar.

Para mejorar el programa podemos indicarle a los métodos creados que lance una excepción y una vez que se ejecute el error capturarlo, esto se realiza utilizando la cláusula Throws.

Si añadimos Throws al método con el error:

static void pedirDatos() throws InputMismatchException{

Si volvemos a ejecutar la aplicación:



Nos vuelve a dar el error porque no hemos capturado el error. Para captura el error lo haríamos de la siguiente forma:

static void pedirDatos() throws InputMismatchException{

            try {

           

            Scanner sc=new Scanner(System.in);

           

            System.out.println("Introduce tu nombre, por favor: ");

           

            String nombre_usuario=sc.next();

           

            System.out.println("Introduce tu edad, por favor: ");

           

            int edad_usuario=sc.nextInt();

           

            System.out.println("Hola "+nombre_usuario+" el año que viene tendrás "+(edad_usuario+1)+ " años");

           

            sc.close();

            }catch(InputMismatchException e) {

                 

                  System.out.println("No has introducido correctamente la edad");

            }

           

            System.out.println("Hemos terminado");

           

      }

 

Mediante la estructura try.. catch, dentro del try está el código que introducimos por consola, si todo es correcto se ejecuta el último System.out.println pero si hay un error a la hora de introducir la edad se ejecuta el catch, probamos:



Con cualquier duda podéis hacérmelo llegar a través de los comentarios del blog. Hasta pronto!

10.2 THROWS / TRY / CATCH I << >> 10.4 LANZAMIENTO DE EXCEPCIONES



No hay comentarios:

Publicar un comentario