1
resposta

[Projeto] Divisão por zero no tratamento de exceções

Salve, pessoal. Fiz o desafio de tratamento de exceções em que é necessário tratar uma divisão por zero. Tive que usar um if pra verificar se o segundo número era zero e usar o throw pra causar o erro porque quando eu tentei dividir um número por 0 não obtive erro, mas sim o resultado Infinity. Também usei uma conversão explícita pra float pra divisões em que o resultado não é inteiro e um InputMismatchException caso o input não seja um número inteiro.

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

public class Division {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        try {
            System.out.println("Insira o primeiro número inteiro");
            int primeiroNumero = input.nextInt();
            System.out.println("O primeiro número é " + primeiroNumero);
            System.out.println("Insira o segundo número inteiro");
            int segundoNumero = input.nextInt();
            if (segundoNumero == 0) throw new ArithmeticException("Impossível dividir por zero");
            System.out.println("O segundo número é " + segundoNumero);
            float division = (float) primeiroNumero / segundoNumero;
            System.out.printf("A divisão dos dois número é %.2f%n", division);
        } catch (InputMismatchException e) {
            System.out.println("Ambos os números devem ser inteiros");
        }
    }
}
1 resposta

Olá, João!

Parece que você fez um bom trabalho ao tratar a exceção de divisão por zero e também ao tratar a exceção de incompatibilidade de entrada (InputMismatchException). No entanto, acredito que a confusão esteja ocorrendo porque, em Java, a divisão de um número inteiro por zero realmente resulta em uma exceção (ArithmeticException), mas a divisão de um número em ponto flutuante por zero resulta em Infinity, que é um valor válido para números em ponto flutuante.

No seu código, você está convertendo os números inteiros para ponto flutuante antes de realizar a divisão, então a operação não resulta em uma exceção, mas em Infinity. Isso acontece porque a operação de divisão é realizada entre números em ponto flutuante, não entre números inteiros.

Se você quiser que a divisão por zero resulte em uma exceção, você deve realizar a divisão antes de converter os números para ponto flutuante. Aqui está um exemplo de como você poderia fazer isso:

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

public class Division {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        try {
            System.out.println("Insira o primeiro número inteiro");
            int primeiroNumero = input.nextInt();
            System.out.println("O primeiro número é " + primeiroNumero);
            System.out.println("Insira o segundo número inteiro");
            int segundoNumero = input.nextInt();
            if (segundoNumero == 0) throw new ArithmeticException("Impossível dividir por zero");
            System.out.println("O segundo número é " + segundoNumero);
            int division = primeiroNumero / segundoNumero;
            float divisionFloat = (float) division;
            System.out.printf("A divisão dos dois número é %.2f%n", divisionFloat);
        } catch (InputMismatchException e) {
            System.out.println("Ambos os números devem ser inteiros");
        }
    }
}

Nesse exemplo, a divisão é feita entre números inteiros, então se o segundo número for zero, uma ArithmeticException será lançada. Depois disso, o resultado da divisão é convertido para ponto flutuante para exibição.

Espero ter ajudado e bons estudos!