public Aluno localizarAluno(){
for (int i = 0; i < alunos.size(); i++){
Aluno a = alunos.get(i);
if (a.getMatricula()==matricula){
return alunos.get(i);
} else return null;
}
}
Ta dando" missing return statment", e não posso colocar outro return aleatório, porque vai interferir no resultado do programa…
Preciso verificar se existem um aluno com a matricula que o usuário informou, se existir ele deve ser exibido com todos os atributos, se não deve retornar null
O erro de “missing return statement” ocorre porque existe um caso em que esse método não retorne nada (nem null): quando alunos.size() é igual a zero, pois o laço não executa nenhuma vez.
Você precisa adicionar um return para isso. Algo como:
public Aluno localizarAluno(){
if (alunos.size() == 0){
return null;
}
for (int i = 0; i < alunos.size(); i++){
Aluno a = alunos.get(i);
if (a.getMatricula()==matricula){
return alunos.get(i);
} else return null;
}
}
Só que seu código tem um problema: se o primeiro aluno no array alunos não for o que está sendo procurado, o método já retorna (“else return null”), sem verificar os demais alunos. Você precisa verificar, mas não retornar null caso o aluno verificado não seja o correto. Apenas continue o loop:
public Aluno localizarAluno(){
if (alunos.size() == 0){
return null;
}
for (int i = 0; i < alunos.size(); i++){
Aluno a = alunos.get(i);
if (a.getMatricula()==matricula){
return alunos.get(i);
} // note que o else foi removido, o que faz o loop continuar
}
return null; // sem esse return, você obterá de novo o erro de missing return statement
}
Juntando tudo, você pode fazer algo como:
public Aluno localizarAluno(){
Aluno aluno = null;
for (int i = 0; i < alunos.size(); i++){
Aluno a = alunos.get(i);
if (a.getMatricula()==matricula){
aluno = alunos.get(i);
break; // encerra o loop
}
}
return aluno; // retorna o aluno encontrado, ou null caso alunos.size() seja zero ou o aluno não tenha sido encontrado
}
PS: torne a variável matricula um parâmetro do método.
Abraço.
Brother, muito boa sua explicação! De verdade, gostei pra caramba! Más ainda ta retornando null o tempo inteiro… Mais alguma sugestão?
A logica está perfeita… Não deveria acontecer isso
Pensei em fazer uma verificação usando equails antes de entrar no if, pra só entrar se ele verificar que a matricula já existe, mas tb n deu certo
Você está testando com uma matricula que existe no Array alunos?
Qual o tipo do atributo matricula? Se for String, você tem que comparar com equals ou equalsIgnoreCase, não com “==”. Assim:
for (int i = 0; i < alunos.size(); i++){
Aluno a = alunos.get(i);
if (a.getMatricula().equalsIgnoreCase(matricula)){
aluno = alunos.get(i);
break; // encerra o loop
}
}
Abraço.
Não, não… é int mesmo! Eu faço o cadastro do aluno antes, e depois tenho a opção de consultar aluno informando o numero da matricula. Então fiz assim:
case 4:
if (teste==null) {
System.out.println("Nenhum diario localizado! Tente novamente.");
}
else{
System.out.println("Informe a matricula a ser buscada: ");
teste.matricula = Teclado.nextInt();
System.out.println("Aluno "+teste.localizarAluno());
}
break;
Sempre da "Aluno null"
teste é o objeto da outra classe que eu criei
Encontrei o erro, o erro estava na array list, que não estava adicionando os objetos