ArithmeticException com Double

pessoal, estou tentando criar uma exceção devido a uma divisão por zero da seguinte maneira:


import java.util.InputMismatchException;
import java.util.Scanner;

public class exemploExcecao2 
{
    public static void main(String args[])
    {
        Scanner scanner = new Scanner(System.in);
        try
        {
            System.out.print("Entre com um inteiro ");
            int numero1 = scanner.nextInt();
            
            System.out.print("Entre com um inteiro ");
            int numero2 = scanner.nextInt();
            int resultado = numero1 / numero2;
            System.out.printf("O resultado da divisão é: %f\n", resultado);
        }
        
        // tratamento de exceções
        catch(ArithmeticException arithmeticException)
        {
            System.err.printf("\nExceção: %s", arithmeticException);
            System.out.println("Não divida por zero cara!!!");
        }
        catch(InputMismatchException inputMismatchException)
        {
            System.err.printf("\nExceção %s", inputMismatchException);
            System.out.println("Cara... Entre com o tipo certo de dados né!!!");
        }
        
        finally
        {
            System.out.println("Pra dizer que eu não executei, estou aqui!!!!!!");
        }
    }
}

dessa forma funciona certinho… quando eu entro no denominador um zero ele captura a exceção e tudo funciona como eu planejei. No entanto, quando eu uso double no lugar de int, ou seja, da seguinte maneira:


import java.util.InputMismatchException;
import java.util.Scanner;

public class exemploExcecao2 
{
    public static void main(String args[])
    {
        Scanner scanner = new Scanner(System.in);
        try
        {
            System.out.print("Entre com um inteiro ");
            double numero1 = scanner.nextDouble();
            
            System.out.print("Entre com um inteiro ");
            double numero2 = scanner.nextDouble();
            double resultado = numero1 / numero2;
            System.out.printf("O resultado da divisão é: %f\n", resultado);
        }
        
        // tratamento de exceções
        catch(ArithmeticException arithmeticException)
        {
            System.err.printf("\nExceção: %s", arithmeticException);
            System.out.println("Não divida por zero cara!!!");
        }
        catch(InputMismatchException inputMismatchException)
        {
            System.err.printf("\nExceção %s", inputMismatchException);
            System.out.println("Cara... Entre com o tipo certo de dados né!!!");
        }
        
        finally
        {
            System.out.println("Pra dizer que eu não executei, estou aqui!!!!!!");
        }
    }
}

simplismente é imprimido como resultado da divisão: Infinity, o que mostra que a exceção ArithmeticException não funcionou nesse caso. Gostaria de saber o por que só esta funcionando com int, logo que uma divisão 0/0 é identica matematicamente a 0/0,0000.

É isso mesmo. É o comportamento esperado.

Se você dividir algo por zero (inteiro), você irá obter uma exceção; dividir algo por zero (ponto flutuante) pode lhe gerar três resultados diferentes:

+Infinity

-Infinity

NaN (Not a Number - no caso de dividir zero por zero).

thingol, o por que o +Infinity e -Infinity é devido ao Zero do ponto flutuante nunca ser zero exatamente né… Como eu trato o NaN???

Use Math.isNaN (se não me engano; veja o javadoc da classe java.lang.Math).

Esse é o número que é diferente de si mesmo (experimente fazer isto:

double d = 0.0 / 0.0; // Not a Number
System.out.println (d == d); // deve imprimir "false"

vlw thingol… a classe que eu encontrei para tratar isso é: java.lang.Double… só pra confirmar