Criar Exception

4 respostas
rafael22fs

Boa tarde pessoal,

Estou começando a estudar java agora e treinando sozinho também, estou estudando exception por video aulas e entendi o conceito porém não estou conseguindo criar uma... na video aula que eu vi a exception tem um string que recebe um valor dentro de um if mas na minha aplicação não sei como encaixa-la...
package Exercicios;

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

public class ImcTeste {

	public static void main(String[] args) {
		
		
		Scanner scan = new Scanner(System.in);
		boolean continua=true;
	do{
		try{	
				System.out.println("Informe seu peso: ");
				double peso = Double.parseDouble(scan.nextLine());
				System.out.println("Informe sua altura: ");
				double altura = Double.parseDouble(scan.nextLine());
				continua=false;
				ImcComTudo e = new ImcComTudo(peso,altura);
				
				e.calcula();
			}	
			catch(java.lang.NumberFormatException e1){
			System.err.println("Numeros deve ser inteiros");
			scan.nextLine();
			}/*A EXCEPTION ENTRARIA AQUI SABENDO QUE NAO SE PODE DIVIDIR POR ZERO
			MAS A APLICACAO ACEITA SEM RETORNAR ERRO, SÓ A RESPOSTA RETORNA "?"
                        PRECISO CRIAR PARA QUE ELA NAO ACEITE 0 NOS VALORES
			*/
		}while(continua);
	
	}
		

}

Classe de calculos

package Exercicios;

import java.text.DecimalFormat;

public class ImcComTudo {

	public double p1;
	public double a1;

	public ImcComTudo(double peso, double altura) {
		this.p1 = peso;
		this.a1 = altura;
	}

	void calcula() {
		double res;
		DecimalFormat df = new DecimalFormat();
		df.applyPattern("R$ #,##0.00");
		res = p1 / (a1 * a1);
		System.out.println("IMC: " + df.format(res));
	}
}

Falando a grosso linguajar... "como criar uma exception" eu ja pesquesei mais ainda nao consegui compreender como cria-la sem o "erro" e sem if.

Lembrando que sou ainda um mero aprendiz então qualquer erro e melhoria que voces verem no código podem falar... valeu!

4 Respostas

E

A divisão por zero só gera uma ArithmeticException se for uma divisão inteira, ou seja, onde os dois operandos forem int e/ou long.

No seu caso, você está trabalhando com double, e uma divisão de um double por zero retorna o número +Infinity ou -Infinity. A divisão de um double zero por zero retorna o número NaN (“Not-a-Number”).

yurifw

se quiser que a exceção seja lançada, vc vai ter q usar o throw.
o que seria um erro para a sua regra de negocio? no caso se a altura for =0 o programa teria um comportamento inesperado ne?
entao qdo vc define a altura testa, se for 0 vc lança a exceção:

throw new ExcecaoQueQuiserLancar();
//vc tb pode colocar uma String como argumento* para essa exceção, essa String é a o que fez a exceção ser lançada. por exemplo:
throw new InvalidArgumentException("a altura deve ser maior do que 0");

*não sao todas as Exceções que aceitam esse argumento, mas a maioria aceita xD

rafael22fs

entanglement obrigado, não sabia disso e já me ferrei em exercícios simples com esse maldito retorno NaN hahaha…

yurifw Entendi cara, minha real duvida era se precisaria criar um if else pra pode fazer essa excecao, como pode-se ver no meu programa seria bem mais facil tratar com if else do que uma exceção, mas como sou um aluno e to aprendendo vamos pra cima.

Obrigado a todos.

JavaDreams

rafael22fs:
entanglement obrigado, não sabia disso e já me ferrei em exercícios simples com esse maldito retorno NaN hahaha…

yurifw Entendi cara, minha real duvida era se precisaria criar um if else pra pode fazer essa excecao, como pode-se ver no meu programa seria bem mais facil tratar com if else do que uma exceção, mas como sou um aluno e to aprendendo vamos pra cima.

Obrigado a todos.

Experimenta olhar sobre o assunto nos livros
Java Use a Cabeça
e
Java Como Programar

Assim poderá ampliar seu conhecimento sobre exception

abraço e seja bem vindo ao GUJ.

Criado 2 de agosto de 2013
Ultima resposta 20 de ago. de 2013
Respostas 4
Participantes 4