Java - Problemas con excepciones en java

   
Vista:

Problemas con excepciones en java

Publicado por Guillermo (1 intervención) el 21/03/2016 01:17:18
Buenos días, estimados estoy comenzando a programar en java y viendo un poco el tema de las excepciones en este lenguaje.
Necesito un programa que utilice excepciones y sea 100% funcional para rendir mi primer parcial, mi idea es sencilla y clara, una clase en java llamada divisiones, la cual divida un numero por otro ingresados por el usuario y le muestre el resultado.
Las excepciones que me gustaría salvar es la famosa división por 0, y mostrar un msj en caso de que el usuario en vez de poner un numero coloque una letra.
.En la imagen "Excepciones" les muestro el código, para que vean como lo hice.
https://www.dropbox.com/s/b6m8ci8tl0kv5gt/Excepciones.jpg?dl=0

.En la imagen "división por 0" les muestro el msj que emite el programa cuando al ejecutarlo coloco como divisor un 0, en vez de mostrarme el msj de excepción me muestra "Resultado= Infinity"
https://www.dropbox.com/s/36igpgxolm095kf/division%20por%200.jpg?dl=0

.En la imagen "Ingresar numero" les muestro el msj que emite cuando al ejecutarlo en vez de ingresar un numero, ingreso una letra. Me muestra el msj colocado en la excepción, pero después me emite un error que desconozco como solucionar.
https://www.dropbox.com/s/wxbiciwi0jdkaml/ingresar%20numero.jpg?dl=0

Aguardo comentarios.

Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Problemas con excepciones en java

Publicado por Thanatos (69 intervenciones) el 23/03/2016 12:29:23
Tu programa realiza la división entre dos valores de tipo float, es por eso que al realizar la división entre cero no se lanza la excepción ArithmeticException; lo mismo sucedería si sólo uno de ellos fuera de tipo float (o double). Si ambos valores fueran de tipo entero, se lanzaría la excepción.

Cuando se presentan casos especiales de la división, mientras se utilizan tipos de datos que aceptan decimales, puedes obtener alguno de estos resultados:

División de un literal positivo de tipo float entre cero:
1
2
3
4
System.out.println("cociente = " + (2.0f / 0));
 
// SALIDA
// cociente = Infinity

División de un literal negativo de tipo float entre cero:
1
2
3
4
System.out.println("cociente = " + (-2.0f / 0));
 
// SALIDA
// cociente = -Infinity

División del literal cero, de tipo float, entre cero:
1
2
3
4
System.out.println("cociente = " + (-0.0f / 0));
 
// SALIDA
// cociente = NaN
NaN = Not a Number = No es un número

Si quieres que se produzca una excepción debido a la división entre cero, sin modificar los tipos de datos que estás utilizando, puedes lanzar la excepción tu mismo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import java.util.Scanner;
import java.util.InputMismatchException;
 
class Division {
 
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        float dividendo, divisor, resultado = 0.0f;
        int bandera = 1;
 
        while (bandera == 1) {
            try {
                System.out.print("Ingrese el dividendo: ");
                dividendo = entrada.nextFloat();
                System.out.print("Ingrese el divisor: ");
                divisor = entrada.nextFloat();
                if (divisor == 0.0f) {
                    throw new ArithmeticException();  // lanza la excepción
                } else {
                    resultado = dividendo / divisor;
                    System.out.println("\nEl resultado es " + resultado);
                }
            } catch (ArithmeticException ae) {
                System.out.println("\n* No es posible dividir por cero, vuelva a intentarlo *");
            } catch (InputMismatchException ime) {
                System.out.println("\n* Solo se pueden ingresar numeros *");
            } finally {
                System.out.println("\nIngrese 1 para realizar otra division, otro numero para salir");
                entrada.nextLine();
                bandera = entrada.nextInt();
                if (bandera != 1) {
                    entrada.close();
                }
            }
        }
    }
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar