Problema com Try Catch

4 respostas
henry.everton

Bom o que acontece é o seguinte:
Estava lendo a apostila da Caelum e lá diz que é ruim utilizar if retornando um valor booleano caso o parametro passado esteja errado.
Pois bem estou tentando executar com o Try Catch agora mas, como farei pra ele solicitar ao usuário toda vez que ele digitar o parametro de forma errada.

import java.io.*;
public class Teste{

	public String nome="";
	
	public String Excecao(String nome){
		try {
		
		if(nome.equals("Henry")){
			throw new IllegalArgumentException();
			}
		else{
			this.nome = nome;
			return(this.nome);
			}
		
		}
		catch(IllegalArgumentException e){
			System.out.println("Digitou Henry e nao pode");
		}
	}
}

Classe principal

import java.util.*;

public class ExemploExcecao{

public static void main(String args[]){

	Teste t = new Teste();
	
	System.out.println("Digite seu nome");
	Scanner src = new Scanner (System.in);
	String oia = src.nextLine();
	String retorno = t.Excecao(oia);
	
	System.out.println(retorno);
	
}
}

Seguinte ele esta dando este erro aqui tb, porque?

C:\>javac ExemploExcecao.java
.\Teste.java:20: missing return statement
}
^
1 error

Bom desde já agradeço quem me ajudar

4 Respostas

bernardo.rafael

você deve colocar um return dentro ou após o catch.
O método precisa ter um valor de retorno, mesmo em casos de exceção.
:wink:

LPJava

simples, lendo a mensagem: Se seu metodo lançar uma exceção ele deve return alguma coisa senao ele tb deve return alguma coisa… o compilador ele nao pensa… antes dele chegar a linha q lança uma exceção… ele verifica se vc implementou correto o metodo e nao implementou nao… pq ele ver olha tem uma exceção aki e ela é trata ali… mais eu vou retornar o q? nao to achando o return qdo lanço uma exceção… ja que o método define q ele tem q retornar uma String.

entendeu? sempre que vc coloca um tipo que nao seja void… vc deve return algo para o seu método senao o codigo nao compila… Tratamento de exceções nao tem nada ver com esse problema… e sim o assunto de fundamentos :d

flw!! qualquer duvida so gritar… olha o codigo basico que nao compila e que compila:

//nao compila

...
String zad(){
if(num==1){
return "1";
}
else{
return"0";
}
}

é garantido que um ou outro execute mais nesse aqui nao:

String zz(){
if(num==0){
return"0";}

//cadê o return caso seja falso?
}

percebeu o problema que o compilador diz?

T

Ele disse "Missing return statment at Teste.java:20.
Isso quer dizer que no método public String Excecao(String) voce não está retronando nada....
Ah, mas vc estava dentro do else, não é?! SIM, porem o compilador não pode garantir que aquele ponto será atingido em tempo de execução, e para resolver isso é só colocar no método um return no final.

public String Excecao(String nome){
 		try {
 		
 		if(nome.equals("Henry")){
 			throw new IllegalArgumentException();
 			}
 		else{
 			this.nome = nome;
 			}
 		
 		}
 		catch(IllegalArgumentException e){
 			System.out.println("Digitou Henry e nao pode");
 		}
 	return this.nome;
 	}
T

bernardo.rafael:
você deve colocar um return dentro ou após o catch.

Tem que ser depois do catch, afinal o catch captura um evento excepcional, e o compilador vai continuar querendo um return no final. Teste ai.

Criado 21 de agosto de 2007
Ultima resposta 21 de ago. de 2007
Respostas 4
Participantes 4