Galera me ajudem a resolver esse problema... é bem simples, mas não encontro solução!

    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