Está en la página 1de 7

LENGUAJES DE PROGRAMACIN 1 - TALLER 3 ACI-221-181 -- NRC: 1000

MANIPULACIN DE ERRORES.

En java los errores en tiempo de ejecucin se denominan Excepciones; cuando ocurre un error,
java genera un clase con informacin del error, la informacin que se entrega depende del tipo de
error as como los mtodos para poder tratar con ella, cabe sealar que en java existen muchos
tipos de errores, por ende mencionarlos, uno a uno, sera interminable.

La clase padre de las clases que arrojan errores se denomina Throwable, la cual est a la cabeza
de una jerarqua de errores.

Los dos principales tipos de excepciones son:

RuntimeException, se refiere a los errores que como programadores pueden cometer, entre
estos tenemos las divisiones por 0, acceso a ndices inexistentes en un vector entre otros.
IOException, que se refiere a errores ajenos a la programacin, por lo general se asocian a
la entrada o salida de datos, es decir al usuario del programa.

Ejemplo 1 El programa que a continuacin vern, solicita al usuario el ingreso de dos nmero
enteros, es decir ac nos podemos encontrar con errores del tipo IOException.
Como pueden ver, el cdigo al ejecutar lanzar un error ya que en el usuario a la segunda variable
le dio un valor no numrico; como pueden apreciar, el programa trmino su ejecucin
entregndonos informacin sobre el error, en este caso nos indica una excepcin de tipo.
Afortunadamente Java nos ofrece una alternativa para evitar que el programa lance el error, para
ello se debe recurrir a la estructura try catch finally, veamos nuestro ejemplo con esta estructura.

try: es el primer bloque en ejecutarse, en el colocamos las sentencias que pueden ocasionar
una excepcin.
catch():segundo bloque en instanciar y debe recibir como parmetro, la excepcin arrojada
por el bloque try, y luego en el podemos colocar las instrucciones que se detonaran en el
caso de ocurrir una excepcin.
Finally: tercer bloque en ejecutarse, el cual contiene las instrucciones que se ejecutan tanto
si hay o no excepciones.

Se puede prescindir de catch o finally, pero nunca de ambas.

Veamos nuestro ejemplo corregido:


Como pueden apreciar, no importando que para n2 se haya ingresado un carcter, el programa
termino su ejecucin, cabe sealar que la solucin en el catch no es la ms adecuada, esta asigna
un valor esttico a la variable n2 en el caso de producirse una excepcin, como pueden ver hay una
lnea comentada, la que instancia el mensaje que entrega la excepcin a travs del objeto ex, el cual
ha recibido como parmetro la excepcin en el catch, dependiendo de la clase que se genera con la
expresin, este mensaje tiene o no importancia.

Ejemplo 2 Crearemos un pequeo programa que pida al usuario dos numero enteros (el primero lo
usaremos como numerador y el segundo como denominador) a partir de estos nmeros
encontraremos el DIV (cociente) y el mod (resto); como pueden apreciar este programa solicita dos
parmetros enteros al usuario, es decir ac puede ocurrir una excepcin del tipo IOException,
asociada al ingreso de datos, pero tambin puede ocurrir una excepcin del tipo RuntimeException,
ya que si se ingresa un 0 en el denominador, numero vlido para el tipo de dato primitivo int este
arrojara un error de divisin por 0, a continuacin veremos el programa sin los bloques try
catch() finally

Tal como se coment anteriormente, este pequeo programa, puede lanzar varios errores, es por
ello que a continuacin iremos integrando los bloques try en donde corresponda:

1. La primera excepcin que podemos encontrar aparecer, en la lnea 12 n1 = leer.nextInt();


esta lnea de cdigo, el mtodo nextInt() de la clase Scanner, espera que se ingrese un
numero entero, cualquier otra cosa que se ingrese es decir, un carcter, un
numero decimales, un nmero ms largo que el admitido para enteros es decir cualquier
otro tipo de dato que se intente asociar a la variable n1, detonar la excepcin
InputMismatchException asociada al tipo de dato, en base a esto corregiremos el
programa hasta esta lnea.

Dado que el error se detona en cuanto se ingresa mal un dato, es recomendable, crear un ciclo,
para que el dato se vuelva a solicitar, es por ello que se crea la variable bandera inicializada en
0, la cual cambiar a 1 en cuanto el dato sea ingresado correctamente, terminando con el ciclo
do, a continuacin explicamos cmo se hizo el manejo de excepciones:

Bloque try, en este bloque colocamos todo el cdigo relacionado con la excepcin, el
cambio de la variable bander, el mensaje y por supuesto la lnea que puede detonar la
excepcin.
Bloque catch(), el mtodo next.Line() nos ayuda a que en cuanto se detone la excepcin
este vuelva a solicitar el dato, es decir vuelve al try, este mtodo es propietario de la
clase Scanner; luego aparece el mensaje para el usuario y reiniciamos bandera para que
no se salga del ciclo.
Bloque finally, no es necesario ya que no queremos hacer nada en caso de que exista o
no una excepcin.

2. En la lnea 14 encontramos este cdigo n2 = leer.nextInt(); la que generar la misma


excepcin del punto anterior, la que se tratar de la misma forma, no obstante a esto en la
lnea 15 podemos encontrar este cdigo dividion = n1 / n2;; en el caso de ser ingresado
un 0 para n2, esta lnea detonar la excepcin ArithmeticException, por ende en este
bloque de cdigo encontramos dos excepciones que podemos tratar desde un mismo
bloque try, en este caso usaremos un bloque try seguido de dos bloques catch(), esto se
puede hacer ya que el bloque try puede detonar diferentes excepciones, en este caso se
generan los catch() necesarios (recuerde que un catch solo puede recibir una excepcin)
estos se ejecutaran en orden, en base a esto nuestro cdigo quedar de la siguiente forma:

Al igual que en el punto dos generamos un ciclo, para repetir mientras el dato este mal
ingresado, debido a que las dos excepciones son distintas, podemos colocarlas en el mismo
bloque try, esta es la razn para no haber usado el cdigo anterior en el mismo bloque try
con tres catch, ya que la excepcin de n1 y n2 son las mismas.

Bloque try, capta las excepciones provocadas por las lneas 14 y 15 (asignar dato a
n2 y la divisin de n1 por n2).
Primer Bloque catch(), al igual que en el punto uno capta el mal ingreso del tipo de
dato y vuelve a solicitarlo.
Segundo Bloque catch(), capta la divisin por 0 indica del error y vuelve a solicitar
el valor para n2.
Bloque finally, no es necesario ya que no queremos hacer nada en caso de que
exista o no una excepcin.

Si se est preguntando si puede separar este bloque try en dos, esto se puede hacer sin
problemas, solo que aumentar el cdigo, por otra parte es interesante recalcar que los catch
se ejecutaran en orden, es decir si captura el primero este no entrar al segundo; el ejemplo
completo lo puede encontrar en el zip llamado ejemplo que ubicado en la pgina de la
universidad.
ACTIVIDADES PROPUESTAS

1. Cree un programa en java usando netBeans, el que le permita representar la clase expuesta
en UML, debe generar todos los mtodos que en esta aparecen, en base a lo explicado por
el docente, adems incluya un mtodo que permita ver la ficha del personaje, el programa
debe permitir crear 5 personajes.(40 Puntos)

2. Cree un programa en java que realice las siguientes acciones desde un men:

a. Cree y llene dinmicamente un vector o arreglo de tamao 10 con el cuadrado de


su posicin.
b. Cree y llene dinmicamente un vector o arreglo de tamao 10 con los 10 primeros
nmeros pares existentes a partir del nmero 2
c. Cree y llene un vector o arreglo de tamao 10 con nmeros impares ingresados por
el usuario.
d. Cree y llene un vector o arreglo de tamao 10 con la suma de los datos de los
vectores creados en el punto a y b, si el usuario selecciona esta opcin y no han sido
creados los vectores del punto A y B, debe enviar el mensaje de error al usuario.
e. Cree los 4 mtodos que le permitan al usuario ver el contenido de cada vector, si el
vector no ha sido creado, entregue el mensaje de error correspondiente y vuelva al
men.
(*) 5 puntos cada uno
3. Cree un programa en java que realice las siguientes acciones desde un men:

a. Llene una matriz de 5 X 5 con nmeros enteros.


b. Muestre el contenido de la matriz
c. Muestre la diagonal principal.
d. Muestre la diagonal secundaria.
e. Muestre la divisin entre la suma de los elementos de la diagonal principal
dividido la suma de los elementos de la diagonal secundaria.
(*) 5 puntos cada uno