[quote=diego2005]Faça assim:
[code]public static Veiculo obtemVeiculo(String matricula) {
Iterator iter = _veiculos.iterator();
Veiculo result = null;
while (iter.hasNext()) {
Veiculo veic = iter.next();
if (matricula == veic.obtemMatricula()) {
result = veic;
break;
}
else iter.next();
}
return result;
} [/code]
T+[/quote]
Em complemento à resposta do Diego:
No seu código (dentro do laço) você está dizendo: “Pegue o próximo veículo da lista e atribua a veic. Se a matrícula dada como parâmetro for igual à de veic, retorne veic. Senão, vá para o próximo veículo da lista.”.
Minhas considerações:
1 - O compilador estava reclamando que o método não estava retornando nada porque, apesar de você estar retornando algo, você está o fazendo dentro de um bloco de condição (if). Entretanto é possível que a matrícula de nenhum dos veículos da lista seja igual à dada como parâmetro. No código atual, você não retorna nada nessa situação. O exemplo dado pelo Diego resolve esse problema.
2 - Você está chamando duas vezes, dentro do mesmo laço, o método next() do Iterator iter. Com essa chamada, você está comparando os veículos de dois em dois, ou seja, se a lista tiver 5 veículos, você somente comparará os veículos das posições 0, 2 e 4 da lista. É esse o comportamento que você deseja que ocorra nessa iteração?
3 - Na comparação de Strings, é aconselhável a utilização do método equals().
Segue a minha sugestão de código, conforme as considerações acima:
public static Veiculo obtemVeiculo(String matricula){
Iterator<Veiculo> iter = _veiculos.iterator();
Veiculo veic = null;
while (iter.hasNext()){
veic = iter.next();
if (matricula.equals(veic.obtemMatricula()))
break;
}
return veic;
}