Dúvida em Exceções

5 respostas
Mangueiradimu

Estou fazendo um exercício q foi pedido em minha prova na faculdade …
O usuario vai digitar dois valores, e irá mandar p ele as quatro operações matemáticas, e devo colocar uma exceção qdo o segundo valor for 0 para a divisão …
Esse programa foi feito em três classes para poder exercitar herança e entitulados de BaseCalculadora,Calculadora e PrincipalCalculadora …
A minha dúvida é onde devo colocar a exceção pq ele está rodando direitinho mas naum consigo tratar a exceção …
Aki vai as classes sem exceção para q alguém possa ajudar a saber qual o local certo.

package pct_source;

public class BaseCalculadora {
	
	protected float adicao;
	protected float subtracao;
	protected float divisao;
	protected float multiplicacao;
	
	public BaseCalculadora(float a, float b){
	adicao = a + b;
	subtracao = a - b;
	divisao = a / b;
	multiplicacao = a * b;
	}
	
	public float getAdicao() {
		return adicao;
	}

	public float getSubtracao() {
		return subtracao;
	}
package pct_source;

public class Calculadora extends BaseCalculadora {
	
	public Calculadora (float a, float b){
	super (a,b);	
	}
	public void setAdicao(float a, float b){
		adicao = a + b;
	}
	public void setSubtracao(float a, float b){
		subtracao = a - b;
	}
	public void setMultiplicacao(float a, float b){
		multiplicacao = a * b;
	}
	public void setDivisao(float a, float b){
		divisao = a / b;
	}
}
package pct_source;
import java.util.Scanner;

public class PrincipalCalculadora  {
	public static void main(String[] args) {
	
		float a ,b ;
	
		Scanner leteclado = new Scanner(System.in);
		System.out.println("Digite o 1º Valor.: ");
		a = leteclado.nextFloat();
		System.out.println("Digite o 2º Valor.: ");
		b = leteclado.nextFloat();
			
		Calculadora c1 = new Calculadora (a,b);
		System.out.println("Adição.:"+c1.getAdicao());
		System.out.println("Subtração.:"+c1.getSubtracao());
		System.out.println("Multiplicação.:"+c1.getMultiplicacao());
		System.out.println("Divisão.:"+c1.getDivisao());
		
		}
	}

Desde já agradeço a ajuda …

5 Respostas

peczenyj

A exception de divisão por zero é lançada em runtime, eu trataria quando vc chama a divisão, colocando a chamada do método entre try/catch

Mangueiradimu

Tentei deixa assim …

package pct_source;
import java.util.Scanner;

public class PrincipalCalculadora  {
	public static void main(String[] args) {
	
		Scanner leteclado = new Scanner(System.in);
		System.out.println("Digite o 1º Valor.: ");
		float a = leteclado.nextFloat();
		System.out.println("Digite o 2º Valor.: ");
		float b = leteclado.nextFloat();
			
		Calculadora c1 = new Calculadora (a,b);
		System.out.println("Adição.:"+c1.getAdicao());
		System.out.println("Subtração.:"+c1.getSubtracao());
		System.out.println("Multiplicação.:"+c1.getMultiplicacao());
		try{
		System.out.println("Divisão.:"+c1.getDivisao());
		}catch(ArithmeticException e){
			System.out.println("Naum é possível efetuar divisão por 0.");
		}
		}
	}

Mas qdo digito ex: A=6 b=0 aparece assim …

Adição.:6.0
Subtração.:6.0
Multiplicação.:0.0
Divisão.:Infinity ----> Aki eu queria q aparece "Naum é possível efetuar divisão por 0.

venomtotal

Como nosso colega disse, vc deve usar o try e catch na linha onde pode conter o erro, ao meu ver ficaria assim:

public BaseCalculadora(float a, float b){
	adicao = a + b;
	subtracao = a - b;
        multiplicacao = a * b;

	try { //tenta uma operação que pode gerar erro
           divisao = a / b; 
        }
        catch (Exception e) { //se o erro for gerado
            e.printStackTrace();
        }
        

}

Espero ter ajudado.

ViniGodoy

Divisão por zero é o tipo de erro que você não deveria pegar com um try...catch. Não é a toa que ele é uma runtime exception. Simplesmente valide a entrada com um if ou um while simples:

package pct_source;
import java.util.Scanner;

public class PrincipalCalculadora  {
   public static void main(String[] args) {
      Scanner leteclado = new Scanner(System.in);
      System.out.println("Digite o 1º Valor.: ");

      float a = leteclado.nextFloat();
      float b = 0;
      while (b == 0) {
         System.out.println("Digite o 2º Valor.: ");
         b = leteclado.nextFloat();
      }
			
      Calculadora c1 = new Calculadora (a,b);
      System.out.println("Adição.:"+c1.getAdicao());
      System.out.println("Subtração.:"+c1.getSubtracao());
      System.out.println("Multiplicação.:"+c1.getMultiplicacao());
      System.out.println("Divisão.:"+c1.getDivisao());		
   }
}

Outra dica, sempre declare as variáveis o mais próximo possível de onde for usa-las, no menor escopo possível.

Mangueiradimu

Ok muito obg e desculpa a demora por responder …
Ficou muito mais claro agora
Abraxxx

Criado 14 de junho de 2008
Ultima resposta 17 de jun. de 2008
Respostas 5
Participantes 4