1
resposta

Dúvida sobre aplicação de try e catch

Boa tarde, Pessoal! tentei simular o try e catch para o código acima alterando apenas o tipo de dados de int para float. A aplicação não dá mensagem de erro e retorna a mensagem "Divisão de 10 por 0 igual a 8". Claro que isso não faze sentido. Agradeço a ajuda

namespace ByteBank
{
    class Program
    {
        static void Main(string[] args)

        {
            try
            {
                Exibir();
            }

             catch(NullReferenceException erro2)
            {
                Console.WriteLine(erro2.StackTrace);

                Console.WriteLine("Aconteceu um erro!"+ erro2);
            }



            try
            {   
                Metodo();


            }
            catch(NullReferenceException erro)
            {
                Console.WriteLine(erro.StackTrace);
                Console.WriteLine("Aconteceu um erro!"+erro);
            }

            Console.ReadLine();
        }



        // Teste com a cadeia de chamada:
        // Metodo -> TestaDivisao -> Dividir
        private static void Metodo()
        {
            TestaDivisao(0);
        }

        private static void TestaDivisao(int divisor)
        {
            try
            {
                float resultado = Dividir(10, divisor);
                Console.WriteLine("Resultado da divisão de 10 por " + divisor + " é " + resultado);
            }
            catch (DivideByZeroException erro)
            {
                Console.WriteLine(erro.Message);
               // Console.WriteLine(erro.StackTrace);
                Console.WriteLine("Não é possível fazer uma divisão por 0!");
            }
        }

        private static int Dividir(int numero, int divisor)
        {
           // ContaCorrente conta = null;
            //Console.WriteLine(conta.Saldo);

            return numero / divisor;
        }

        private static void Exibir ()
        {

            Mostrar(0);

        }

        private  static void Mostrar(float y)
        {
            try
            {

                float result = Quociente(10, y);
                Console.WriteLine("Resultado da divisão de 10 por"  + " " + y+ " "+"é "+ ""+ result);
            }
            catch (DivideByZeroException defeito)
            {
                Console.WriteLine(defeito.StackTrace);
            }



        }

        private static  float Quociente(float x, float y)
        {

            return x / y;
        }
    }
}

funciona. Provavelmente

1 resposta

Caro João, reproduzindo o seu caso em uma aplicação Windows Forms obtive o seguinte resultado:

Resultado da divisão de 10 por 0 é ∞

Que tal validar o divisor e lançar uma exceção quando for zero?

public static float Quociente(float x, float y)
{
    if(y == 0)
        throw new DivideByZeroException();
    else
        return x / y;
}