Calculating Number Frequency in an Arraylist

Asked

Viewed 243 times

0

I would like a help to calculate the frequency that enrollments (whole numbers) of students appear to be able to count the total number of absences in the day.

public class Principal {
public static void main(String[] args) {
    Turma turma = new Turma("Est. de dados","A1","20191");
    turma.inserirAluno(new Aluno("Anselmo",111));
    turma.inserirAluno(new Aluno("Pedro",222));
    turma.inserirAluno(new Aluno("Joao",333));
    turma.imprimir();
    System.out.println("------------------------------------------");
    Pauta pauta = new Pauta(3,6,turma);
    Pauta.marcarFalta(111, 3, 5);
    Pauta.marcarFalta(111, 3, 12);
    Pauta.marcarFalta(111, 3, 21);
    Pauta.marcarFalta(111, 3, 26);
    Pauta.marcarFalta(111, 4, 2);
    Pauta.marcarFalta(111, 4, 4);
    Pauta.marcarFalta(111, 4, 11);
    Pauta.marcarFalta(111, 4, 23);
    Pauta.marcarFalta(111, 4, 25);
    Pauta.marcarFalta(111, 4, 30);
    Pauta.marcarFalta(111, 5, 7);
    Pauta.marcarFalta(111, 5, 23);
    Pauta.marcarFalta(222, 3, 12);
    Pauta.marcarFalta(222, 3, 21);
    Pauta.marcarFalta(222, 4, 9);
    Pauta.marcarFalta(222, 4, 16);
    Pauta.marcarFalta(222, 4, 25);
    Pauta.marcarFalta(222, 4, 30);
    pauta.imprimir();
    for(Aluno aluno:turma.getAlunos()){
        int totalFaltas = pauta.totalFaltasAluno(aluno.getMatricula());
        System.out.print(String.format("%-44s", aluno.toString()) + " "
        + "#faltas = " + String.format("%2d",totalFaltas));
        if (pauta.verificarReprovacaoPorFalta(aluno.getMatricula())){
            System.out.println(" Presença: reprovado");
        }
        else{
            System.out.println(" Presença: normal");
        }
    }
  }
}

public class Turma {
    static String nomeTurma;
    String codigo;
    String periodo;
    ArrayList<Aluno> alunos = new ArrayList<>();
    public Turma(String nomeTurma, String codigo, String periodo) {
        Turma.nomeTurma = nomeTurma;
        this.codigo = codigo;
        this.periodo = periodo;
    }
    public void inserirAluno(Aluno a) {
        alunos.add(a);
    }
    public static String getNomeTurma() {
        return nomeTurma;
    }
    public void imprimir() {
        System.out.println("Turma: "+Turma.nomeTurma+", Código: "+this.codigo+", Periodo: "+this.periodo);
        for (Aluno b: alunos) { 
            System.out.println(b);
        }
    }
    public ArrayList<Aluno> getAlunos() {
         return alunos ;
    }
 }
 public class Aluno {
     String nome;
     int matricula;

    public Aluno(String nome, int matricula) {
        this.nome = nome;
        this.matricula = matricula;
    }
    public String toString(){
       return "Nome: " + this.nome + ", Matricula: " + this.matricula;
    }
    public int getMatricula() {
        return matricula;
    }
  }
  public class Pauta {
      int mesInicial;
      int mesFinal;
      static ArrayList<Integer> faltas = new ArrayList<Integer>();
      public Pauta(int mesInicial, int mesFinal, Turma turma) {
          this.mesInicial = mesInicial;
          this.mesFinal = mesFinal;
      }
      public static  void marcarFalta(int matricula, int mes, int dia ) {
          faltas.add(new Integer(matricula));
      }

      public int totalFaltasAluno(int resultado ){
           Map<Integer, Integer> m = new TreeMap<>();
           for ( Integer val : faltas) {
               if (!m.containsKey(val)) {
                   m.put(val, 0);
               }
               m.put(val, m.get(val) + 1);
           }
           for ( Map.Entry<Integer, Integer> entry : m.entrySet()) {  
               if(resultado == entry.getKey());
                    resultado = entry.getValue();
        }

        return  resultado;
 }
      public void imprimir() {
            System.out.println("Mês inicial: "+this.mesInicial+ ",Mês Final: "+ this.mesFinal+",Turma: "+ Turma.getNomeTurma());
      }
      public boolean verificarReprovacaoPorFalta(int matricula) {

            return false;
      }

  }

My way out is:

  Turma: Est. de dados, Código: A1, Periodo: 20191
  Nome: Anselmo, Matricula: 111
  Nome: Pedro, Matricula: 222
  Nome: Joao, Matricula: 333
  ------------------------------------------
  Mês inicial: 3,Mês Final: 6,Turma: Est. de dados
  Nome: Anselmo, Matricula: 111                #faltas =  6 Presença: normal
  Nome: Pedro, Matricula: 222                  #faltas =  6 Presença: normal
  Nome: Joao, Matricula: 333                   #faltas =  6 Presença: normal

The Right Way Out Would Be:

 Turma: Est. de dados, Código: A1, Periodo: 20191
 Nome: Anselmo, Matricula: 111
 Nome: Pedro, Matricula: 222
 Nome: Joao, Matricula: 333
 ------------------------------------------
 Mês inicial: 3,Mês Final: 6,Turma: Est. de dados
 Nome: Anselmo, Matricula: 111              #faltas = 12 Presença:reprovado
 Nome: Pedro, Matricula: 222                #faltas =  6  Presença: normal
 Nome: Joao, Matricula: 333                 #faltas =  0  Presença: normal

The calculations to know if it has failed or is normal will still be implemented. the student john is with 6 but would be 0 I am not able to do this implementation, I would like a Light. I thank you already.

1 answer

1


Bruno, I made it quick here but I think it will solve...

Modify the total method in your Staff class:

 public int totalFaltasAluno(int resultado) {

        int totalFaltas = 0;
        for(Integer item : faltas){
            if(item == resultado){
                totalFaltas++;
            }
        }
        return totalFaltas;
    }

I hope I’ve helped! :)

  • Felipe L. Constant, many thanks friend worked perfectly, I hope one day come close to your knowledge in java, I will study for this, I really like programming.

  • Then it won’t be long! hehe.. Friend, living and learning. :)

Browser other questions tagged

You are not signed in. Login or sign up in order to post.