[RESOLVIDO] Chamar o método de uma classe

Bom dia pessoal, estou com um problema da facu que não estou conseguindo resolve. Sou iniciante em java e estou tendo problema em chamar o método “contarGrupo(List perfis,String nome)” da classe “Prova”.
Eu coloque de um jeito criando um 2º constructor (“public Prova (List equipe)”) para classe “Prova” para chamar esse metodo em uma nova instancia (“conjEqp”) que receberá todos os grupos.

Meu problema é que ao executar esse código a resposta é sempre zero (para qualquer nome que eu coloque no metodo):
Capturar

O código q eu já fiz é o seguinte:

public class Test1 {
    public static void main(String[] args) {
 
       // registrar os alunos 
        Prova leticia = new Prova("Leticia",10);
        Prova jose = new Prova("Jose",8);
        Prova lucio = new Prova("Lucio",7);
        Prova anabelle = new Prova("Anabelle",6);
        Prova paulo = new Prova("Paulo",10);
        Prova julio = new Prova("julio",4);

        // adicionar o aluno ao lider do grupo
        leticia.grupo.add(lucio);
        leticia.grupo.add(jose);
        jose.grupo.add(anabelle);
        jose.grupo.add(paulo);
        jose.grupo.add(julio);
        
        // agrupar as equipes
        List<Prova> equipe = new ArrayList<>(); 
        equipe.add(leticia);
        equipe.add(jose);
        
        // chamar metodo para contar quantos alunos estão com o lider do grupo escolhido 
        Prova conjEqp = new Prova(equipe);
        
        int resp = conjEqp.contarGrupo(equipe, "leticia");
        System.out.println(resp);
    }
}

class Prova{
    String nome;   int nota;   List<Prova> grupo; List<Prova> equipe; int n;
    public Prova(String nome, int nota){
        this.nome = nome;
        this.nota = nota;
        this.grupo = new ArrayList<>();
    }
    public Prova (List<Prova> equipe){
        this.equipe = equipe;
    }
    
    public int contarGrupo(List<Prova> perfis,String nome){
        for(int i=0;i<perfis.size();i++){
            Prova p = perfis.get(i);
            if(nome.equals(p.nome)){ 
                n = p.grupo.size();
                break;
            }
        }
        return n;
    }    
}

Quando você utiliza o equals no método contarGrupo para comparar os nomes ele vai basicamente comparar se os dois objetos String tem a mesma sequencia de caracteres, mas lembre que é case-sensitive , então ele diferencia letra maiúsculas de minúsculas. Se você não quiser diferenciá-las pode utilizar o método equalsIgnoreCase.

Você inicializa o objeto passando o nome Leticia:
// registrar os alunos
Prova leticia = new Prova(“Leticia”,10);

E depois no main você faz a chamada do método de busca passando o nome leticia(L minúsculo) e não Leticia:
int resp = conjEqp.contarGrupo(equipe, “leticia”);

Se você passar Leticia ele vai retornar o valor esperado:
int resp = conjEqp.contarGrupo(equipe, “Leticia”);

1 curtida

Kramba, era só esse detalhe. Pow obrigadão Daniel96, me ajudou muito.
Eu ainda não conhecia o “equalsIgnoreCase” foi bom saber.
Fiquei um tempão tentando vê o que era, pensei até que eu tinha chamado o método de forma errada.
Essa forma que eu fiz para chamar o metodo “contargrupo” atraves de outro constructor “Prova” está certo ou foi uma gambiarra, tem alguma forma mais eficiente ou mais certo ?

Olha, mais por uma questão de semântica mesmo, pra cada objeto representar melhor o que ele é e ficar mais legível o código eu faria uma classe separada e não tudo em prova.
Como aqui por exemplo:

List<Prova> equipe = new ArrayList<>();
equipe.add(leticia);
equipe.add(jose);

Você tem uma List de objetos Prova mas representa na verdade equipes, então eu criaria uma classe equipe, ou grupo acima para receber então os objetos de Prova individuais, representando então uma Equipe ou Grupo e não uma Prova.

1 curtida

Obrigado Daniel 95

Marca a resposta como resolvida também