Try/catch ArithmeticException

6 respostas
G
package br.com.senacrs.xiremersoncalcsplus;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.text.Editable;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import java.io.IOException;

public class MainActivity extends AppCompatActivity {
EditText edV1, edV2;
Button btSomar, btSubtraction, btMultiplication, btDivision;

public double exempla1(double a, double b) {
    try {
        return a / b;
    } catch (Divi e) {
        throw new ArithmeticException("Error: the divisor cannot be 0");
    }
}

@Override


protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    edV1 = (EditText) findViewById(R.id.edV1);
    edV2 = (EditText) findViewById(R.id.edV2);
    btSomar = (Button) findViewById(R.id.btSomar);
    btSubtraction = (Button) findViewById(R.id.btSubtraction);
    btMultiplication = (Button) findViewById(R.id.btMultiplication);
    btDivision = (Button) findViewById(R.id.btDivision);


    btSomar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            double v1, v2, soma = 0;
            v1 = Double.parseDouble(edV1.getText().toString());
            v2 = Double.parseDouble(edV2.getText().toString());
            soma = v1 + v2;
            AlertDialog.Builder dialogo =
                    new AlertDialog.Builder(MainActivity.this);
            dialogo.setTitle("Resultado soma");
            dialogo.setMessage("O resultado é " + soma);
            dialogo.setNeutralButton("OK", null);
            dialogo.show();

        }
    });

    btSubtraction.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            double v1, v2, subtraction = 0;
            v1 = Double.parseDouble(edV1.getText().toString());
            v2 = Double.parseDouble(edV2.getText().toString());
            subtraction = v1 - v2;
            AlertDialog.Builder dialogo =
                    new AlertDialog.Builder(MainActivity.this);
            dialogo.setTitle("Resultado subtração");
            dialogo.setMessage("O resultado é " + subtraction);
            dialogo.setNeutralButton("OK", null);
            dialogo.show();

        }
    });

    btMultiplication.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            double v1, v2, multiplication = 0;
            v1 = Double.parseDouble(edV1.getText().toString());
            v2 = Double.parseDouble(edV2.getText().toString());
            multiplication = v1 * v2;
            AlertDialog.Builder dialogo =
                    new AlertDialog.Builder(MainActivity.this);
            dialogo.setTitle("Resultado multiplicação");
            dialogo.setMessage("O resultado é " + multiplication);
            dialogo.setNeutralButton("OK", null);
            dialogo.show();

        }
    });


    btDivision.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {
            double v1, v2;
            v1 = Double.parseDouble(edV1.getText().toString());
            v2 = Double.parseDouble(edV2.getText().toString());


            AlertDialog.Builder dialogo =
                    new AlertDialog.Builder(MainActivity.this);
            dialogo.setTitle("Resultado divisão");
            dialogo.setMessage("O resultado é " + exempla1(v1, v2));
            dialogo.setNeutralButton("OK", null);
            dialogo.show();
        }

    });
}
}

Bom dia!
Então, não estou conseguindo exibir a mensagem do catch quando utilizo um divisor = 0. Alguém pode me ajudar? À princípio o método está funcional, porém retorna o texto "Infinity.

6 Respostas

staroski

Divisão por zero só lança ArithmeticException quando realizada com números inteiros mas você está usando double.

G

Ótimo! Uma luz! Muito obrigado pela tua resposta. Existe algum tratamento de erro para double?

Fabio_Dos_Reis

if(b == 0)
throw new ArithmeticException(“Nã pode ser zero”);

staroski

É que, matematicamente falando, no conjunto dos números reais, se dividir um valor positivo por zero, o resultado será positivo infinito.

G

Exato. Reproduzir esse valor não crasha a memória, dando pau no sistema? No caso, tive a ideia de usar o ArithmeticException por isso, mas posso estar errado.

staroski

Isso está respondido na última frase do primeiro post: o método está funcional, porém retorna o texto “Infinity”

Dê uma lida na IEEE 754.

Se você não quiser permitir a divisão por zero utilizando double, vai ter de tratar isso manualmente.

Exemplo:

public double dividir(double dividendo, double divisor) {
    if (divisor == 0) {
        throw new ArithmeticException("Divisão por zero");
    }
    return dividendo / divisor;
}
Criado 18 de julho de 2019
Ultima resposta 30 de jul. de 2019
Respostas 6
Participantes 3