Ir ao conteúdo
  • Cadastre-se

try e catch. !? Como criar uma Exceção?


Posts recomendados

Eae galera, so novo no fórum e começando a trabalhar com java...tenho muitas duvidas e so muito iniciante as vezes nem é comando que precisa falta é logica mesmo.... mas enfim...

 

como eu criaria uma exceção por exemplo de no try ele so aceitar numero par... e quando usuario digitar um numero impar ele da o erro..?

 

 

Desde ja agradeço... 

Link para o comentário
Compartilhar em outros sites

Fiz algo rapidão, não sei se te dá alguma luz.

 

 import java.util.Scanner; import org.junit.Test; public class Exemplo1 { public static void main(String... args){Scanner sc = new Scanner(System.in);System.out.println("Favor digitar um número para verificar se é par....");int num = 0;try {num = sc.nextInt();new Exemplo1().aceitaNumeroPar(num);System.out.println("O número: "+num+" é par");}catch(NumeroInvalidoException e){//Filtrando erro...E o que vou fazer quando der esse pau? Apenas imprimir mensagem na tela...System.out.println("Número 0 é inválido para o sistema...");}catch (NumeroImparException e) {//Filtrando erro...E o que vou fazer quando der esse pau? Apenas imprimir mensagem na tela...System.out.println("Número digitado foi ímpar...");}catch (Exception e) {//Para demais erros não explicitas... Por exemplo letra...e.printStackTrace();//Apenas imprime o que tem pra mostrar...System.out.println("Pode ter digitado letra....");}} public void aceitaNumeroPar(int numero) throws NumeroImparException, NumeroInvalidoException{ if(numero==0){throw new NumeroInvalidoException();} if(numero%2!=0){throw new NumeroImparException();} }//Apenas para ser interpretado que é um Exceptionclass NumeroImparException extends Exception{ } class NumeroInvalidoException extends Exception{ } @Testpublic void testaAceitaNumeroPar() throws NumeroImparException, NumeroInvalidoException{int numero = 4;Exemplo1 ex = new Exemplo1();ex.aceitaNumeroPar(numero); numero = 6;ex.aceitaNumeroPar(numero); } @Test(expected=NumeroImparException.class)public void testaNumeroImpar() throws NumeroImparException, NumeroInvalidoException{int numero = 5;Exemplo1 ex = new Exemplo1();ex.aceitaNumeroPar(numero); numero = 7;ex.aceitaNumeroPar(numero);} @Test(expected=NumeroInvalidoException.class)public void testaValorInvalido() throws NumeroImparException, NumeroInvalidoException{int numero = 0;Exemplo1 ex = new Exemplo1();ex.aceitaNumeroPar(numero);}} 
Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois...

Exceções não são algo que tu cria a vontade no Java, elas já existem, se tu for ver as API (Classes) do java, vai ver diversas exceções, como NullPointerException, NumberFormatException, entre muitas outras e cada uma delas tem regras para serem disparadas que tem que serem lidas nas APIs de cada uma dessas classes, por exemplo a NumberFormatException ocorre quanto tu tenta converter uma String para um tipo numerico, como int, se na String não tiver somente numeros, o java vai te dar o seguinte erro "NumberFormatException at..." e é para isso que serve o try/catch, para evitar que o java trave quando isso acontecer, vou escrever um trecho de codigo pra ti entender:

 

//Sem try/catch
String numero = "abc";
int num = Integer.parseInt(numero); //Se não conhece essa função, ela converte uma String para um valor do tipo int

//Depois disso o java vai reclamar de NumberFormatException pois ele não pode continuar o codigo por causa desse erro.

//Com o try/Catch
String numero="abc";
int num;
try{
	num = Integer.parseInt(numero);
}catch(NumberFormatException e){
	num=1;
}

Na segunda versão ocorre o seguinte, a variavel numero vai receber algo que não é um numero, então dentro do bloco try (tentar) o java vai tentar converter a variavel numero para uma variavel int chamada num. porém, ela não vai conseguir, pois não há só numeros dentro da String e sim letras. Sem o try/catch o java iria travar seu codigo, porém no bloco catch(pegar/capturar), tu disse que se houvesse a exception, ele deveria trata-la, nesse caso eu disse que ele deveria por 1 por padrão.

 

O que aconteceu, o java tentou converter uma string em int, mas quando falhou ele começou a executar outra parte do codigo que deveria corrigir o erro tratado.

 

Agora, para o que tu quer fazer, coloque um if/else assim:

Scanner entrada = new Scanner(System.in);
while(true){
	int num = entrada.nextInt();
    if(num%2!=0){
    	throw new Exception("Numero não é par"); //Isso irá dar um erro e irá travar seu codigo
    }
}

Não é bom usar Exception direto, o certo é pesquisar a exception correta mas estou com problemas na internet para pesquisar a mais correta para ti, talvez algo como a IllegalArgumentException seria melhor, mas não tenho certeza, mas para ti que está começando, isso não vem muito ao caso.

 

Outra coisa, não sei quão novo tu é em java ou em programação em geral, se já viu C então acho que já pode ver essas coisas, mas se nunca viu programação, eu acho que essa parte pode ser meio complicado se ainda não entendeu bem o conceito de Orientação a Objetos.

 

Pesquise tambem sobre exception java na internet, terá muitas, se colocar API e o nome da classe irá para um site da oracle que te dira tudo sobre a classe, vou colocar alguns aqui para ti:

NumberFormatException (Java Platform SE 7 )

Scanner (Java Platform SE 7 ) - Oracle Documentation

Exception (Java Platform SE 7 ) - Oracle Documentation

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...