Problemas com retorno

O eclipse acusa o código abaixo de que o método não possui retorno. O que eu estou fazendo de errado?

public Conta buscaPorNome(String nome) { for (int i = 0; i < contas.size(); i++) { if ( contas.get(i).nome.equals(nome) == true) return contas.get(i); } }

OBS: é usado mais acima:

[code]List<Conta> contas = new ArrayList<Conta>();

[/code]

Desde já agradeço.

Creio que vc nao ta retornando nenhum objeto valido para seu metodo.

Poste o codigo completo ou a exceção que esta sendo gerada. :smiley:

Pra falar a vdd, minah duvida real é: Pq ele não usa o “return contas.get(i)” que esta definido ao final do if.

Não sei parceiro pq não vi seu código.

Mas iremos por dedução.

Dizemos então que vc tem um vetor de Contas.
Voce quer fazer uma busca nesse vetor, e retornar um Objeto, ou nome.

Então
Você irá ter que retonar esse “TIPO” de objeto.

No seu caso, o IF retorna, e se for else, retorna o que?

Tera que ter um tipo de retorno nesse metodo ou ele nao irá funcionar entendeu.

Olá:

Bom você colocou um return dentro de um if. Caso o método não ache nenhum objeto, o que ele fará? Tem ter um return fora desse if caso ele não ache.

Espero te ajudado.

Foi como o amigo renato.elric falou, você tem que ter um retorno para o método, mas seu retorno está dentro de uma condição, se não atingir está condição, então seu método não possui retorno. Coloque um outro retorno no final do método ou então coloque o retorno em uma condição ‘else’ do seu ‘if’.

Então gente, eu coloquei um else no final, com outro retorno. E ele ainda esta acusando o msm tipo de erro. Tem algo haver o for nessa história??

Tente o seguinte:

public Conta buscaPorNome(String nome) {  
        for (int i = 0; i < contas.size(); i++) {  
            if ( contas.get(i).nome.equals(nome) == true)  
            return contas.get(i);  
        }
        return null;
    } 

renato.elric,

acho melhor assim… retornal null é tenso

public Conta buscaPorNome(String nome) { // Se existe elementos na coleção então verifico... if(!contas.isEmpty()) { for (Conta conta : contas) { if ( conta.nome.equals(nome) == true) { return conta; } } } // Acho melhor retornar uma instância vazia do que sofrer um NullPointerException lá na frente. return new Conta(); }

É, fica mais bonito e não gera erro caso não trate.

Tudo dependerá de como você utilizará esse retorno.

Mas fica a dia: return dentro de condição tem q ter outro fora para garantir, se não o método será visto como void pelo compilador.

verdade, ele teria que validar com um if(conta == null) depois…ia dar na mesma.

[quote=lucasportela]

// Acho melhor retornar uma instância vazia do que sofrer um NullPointerException lá na frente. return new Conta(); [/quote]
Não deves fazer desta forma.
Se o teu método tem de devolver um objecto e não encontrou, devolve null (ou faz throw duma exception se deveria obrigatoriamente encontrar).
Imagina que depois queres saber se encontrou ou não o objecto. Ao devolver um new Conta() como saberias se era um objecto válido ou o teu objecto vazio?

O problema é Basico, ai existe o risco da classe nunca apanhar o retorno por causa do if…

tambem esse retorno tipo get(i) , é muito duvidoso… peço para postar todo codigo, talvez assim possamos ajudar pois acho que o problema aqui é mesmo Basico

Esse problema é da apostila da Caelum FJ11, onde ele pege pra fazer desse modo e através do Maps. Olha, pelo Maps eu não demorei nem 10 minutos fazendo a lógica e escrevendo e funcionou. Por esse, mew, que trampo q ta dando. Mas enfim, vou postar os 2 códigos fontes: Um é onde esse método se aplica e no outro é a classe que a utiliza. Obrigado pela ajuda de todos.

OBS: O método que usa o Maps é o que deve ser substituído por esse que eu perguntei neste tópico. : )

[code]import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;

import conta.Conta;

public class Banco {

List<Conta> contas = new ArrayList<Conta>();
Map<String, Conta> search = new HashMap<String, Conta>();

public void adiciona(Conta o) {
	contas.add(o);
	search.put(o.nome, o);
}

public Conta pega(int x) {
	return contas.get(x);
}

public int pegaTotalDeContas() {
	return contas.size();
}

public void buscaPorNome(String nome) {
	search.get(nome).mostra();

}

}[/code]

i[code]mport conta.Conta;
import conta.ContaCorrente;

public class teste12 {
public static void main(String[] args) {
Banco bc = new Banco();
Conta c1 = new ContaCorrente();
c1.deposita(10000);
c1.setNome(“Juca”);
c1.setNumero(1001);
bc.adiciona(c1);

	bc.buscaPorNome("Juca");
}

}[/code]

[]'s

Não esta faltando o retorno abaixo?

Tenta como o lucasportela sugeriu, mas retornando null caso não encontre.