[RESOLVIDO]Cálculo de horas trabalhadas em JAVA

Galera, bom dia!!

Tenho um sistema de ponto que grava as 4 marcações e estas são apresentadas normalmente quando faço pesquisa. O que ocorre é que quero que seja feito o cálculo do tempo trabalhado por dia e que me apresente quando solicitar a pesquisa. Detalhe, não quero que o valor desse cálculo seja gravado no banco de dados, apenas que quando solicitado a pesquisa, com as 4 marcações obtidas no banco o sistema faça o cálculo e me apresente. Já tentei de todas as maneiras, mas estou apanhando muito. Quando faço a pesquisa isolada, ou seja, um único registro, me gera normalmente, mas quando a pesquisa é realizada com muitos registro dá erro, ou seja, não consigo ordenar para cada registro pesquisado. O que estava tentando fazer era com a variável que fez a pesquisa eu através de um método obtinha as 4 marcações e calculava o tempo trabalhado. Até aí tudo bem, mas o problema é ordenar essas marcações a cada registro pesquisado da variável tipo List. Alguém poderia me dá uma ideia? Fiz usando uma variável tipo List e usando o “add”, mas ao apresentar na tela fica todo bagunçado. Usando o “add” não consigo definir os atributos “matrícula, Data do Ponto, Entrada, Intervalo Almoço, Retorno Almoço, Saída”. Se eu conseguisse inserir esses campos com valores na variável tipo List, conseguiria listar na tela usando o JSF.

Boa tarde Pessoal.

Consegui resolver a treta, mas pintou uma dúvida. Como faço para copiar uma variável tipo List para dentro de outra variável tipo List sem sobrescrever o conteúdo desta. Por exemplo:

List aux = new ArrayList();
List aux1 = new ArrayList();
List aux2 = new ArrayList();
i=3;
aux.add(teste);
aux.add(teste2);
aux.add(teste3);
aux1.add(teste4);
aux1.add(teste5);

aux2.add(aux);
aux2.add(aux1);

Quando peço para imprimir aux2, me apresenta somente o conteúdo de aux1, sendo que o que eu preciso é listar o conteúdo de aux e aux1. O que está ocorrendo é que o conteúdo de aux1 está sobrescrevendo todo o conteúdo dentro de aux2.

Não sei se consegui ser claro galera. rsrsrsrsrsrsrs

o método add por si só não sobrescreve, se tiver com dúvida breakpoint em casa linha e veja o que está sendo adicionado, e se o size da mesma vai aumentado, simples :slight_smile:

Boa noite Igomes.

Ok, acho que meu exemplo ficou tosco. Segue abaixo novo exemplo:

          saldoHora = ((00 + ":" + diferencaTrabalhada));
          guarda.add(p.getId());
          guarda.add(p.getMatricula());
          guarda.add(p.getNome());
          guarda.add(p.getDataponto());
          guarda.add(p.getRegistroentrada());
          guarda.add(p.getSaidaintervalo());
          guarda.add(p.getRetornointervalo());
          guarda.add(p.getRegistrosaida());
          guarda.add(saldoHora);
          guarda.add(p.getObs());
         
          //aqui a ideia é pegar a variável guarda e gravar em um registro de memória da variável List adicionaTotal, ou seja, se eu pesquisar 10 registros teria que adicionar na variável adicionaTotal os 10 registros para que eu possa posteriormente exibir no JSF. 
          adicionaTotal.add(guarda);

Ocorre que quando adiciono 2 ou mais registros, de fato aparece as quantidades adicionadas, mas com todos os registros com os mesmos valores, com o último lançamento adicionado.

mas depois de adicionar o objeto guarda, voce tem que instanciar ele de novo certo ?
Esse código está dentro de um while ?
Posta o método inteiro

public List getCalcularHoraTrabalhada(List objsPontoEletronico){
int regEntrada;
int regSaidaIntervalo;
int regRetornoIntervalo;
int regSaida;
int diferencaTrabalhada = 0;
int totalPrimeiroTurno;
int totalSegundoTurno;
int totalGeralJornada;
int somaMinutoTotalQuociente;
int somaMinutoTotalResto;
adicionaTotal.clear();
Iterator n = objsPontoEletronico.iterator();
SimpleDateFormat smpH = new SimpleDateFormat(“HH”);
SimpleDateFormat smpM = new SimpleDateFormat(“mm”);
while (n.hasNext())
{
PontoEletronico p = (PontoEletronico) n.next();
regEntrada = (Integer.parseInt(smpH.format(p.getRegistroentrada()))*60)+(Integer.parseInt(smpM.format(p.getRegistroentrada())));
regSaidaIntervalo = (Integer.parseInt(smpH.format(p.getSaidaintervalo()))*60)+(Integer.parseInt(smpM.format(p.getSaidaintervalo())));
regRetornoIntervalo = (Integer.parseInt(smpH.format(p.getRetornointervalo()))*60)+(Integer.parseInt(smpM.format(p.getRetornointervalo())));
regSaida = (Integer.parseInt(smpH.format(p.getRegistrosaida()))*60)+Integer.parseInt(smpM.format(p.getRegistrosaida()));
totalPrimeiroTurno = (regSaidaIntervalo) - (regEntrada);
totalSegundoTurno = (regSaida) - (regRetornoIntervalo);
totalGeralJornada = totalPrimeiroTurno + totalSegundoTurno;
Calendar data = new GregorianCalendar();
data.setTime(p.getDataponto());
if((getDiaSemana(data)).equals(“sexta”))
{
diferencaTrabalhada = totalGeralJornada - 480;

  }
         else
            {
                 diferencaTrabalhada = totalGeralJornada - 540;

            }

  if((diferencaTrabalhada >= 60) || (diferencaTrabalhada <= -60))
  {
      somaMinutoTotalQuociente = (diferencaTrabalhada/60);
      somaMinutoTotalResto = (diferencaTrabalhada%60);
      if (((somaMinutoTotalResto) < 10) || ((somaMinutoTotalResto) < -10))
      {

          saldoHora = ((somaMinutoTotalQuociente) + ":" + 0 + (somaMinutoTotalResto));
          guarda[0]=(p.getId());
          guarda[1]=(p.getMatricula());
          guarda[2]=(p.getNome());
          guarda[3]=(p.getDataponto());
          guarda[4]=(p.getRegistroentrada());
          guarda[5]=(p.getSaidaintervalo());
          guarda[6]=(p.getRetornointervalo());
          guarda[7]=(p.getRegistrosaida());
          guarda[8]=(saldoHora);
          guarda[9]=(p.getObs());
          adicionaTotal.add(guarda);
          
      }
      else{
          saldoHora=((somaMinutoTotalQuociente) + ":" + (somaMinutoTotalResto));
          guarda[0]=(p.getId());
          guarda[1]=(p.getMatricula());
          guarda[2]=(p.getNome());
          guarda[3]=(p.getDataponto());
          guarda[4]=(p.getRegistroentrada());
          guarda[5]=(p.getSaidaintervalo());
          guarda[6]=(p.getRetornointervalo());
          guarda[7]=(p.getRegistrosaida());
          guarda[8]=(saldoHora);
          guarda[9]=(p.getObs());
          adicionaTotal.add(guarda);
                       
      }
  }
  else
  {
          saldoHora = ((00 + ":" + diferencaTrabalhada));
          guarda[0]=(p.getId());
          guarda[1]=(p.getMatricula());
          guarda[2]=(p.getNome());
          guarda[3]=(p.getDataponto());
          guarda[4]=(p.getRegistroentrada());
          guarda[5]=(p.getSaidaintervalo());
          guarda[6]=(p.getRetornointervalo());
          guarda[7]=(p.getRegistrosaida());
          guarda[8]=(saldoHora);
          guarda[9]=(p.getObs());
          adicionaTotal.add(guarda);
                       
  }

   }
 return  adicionaTotal;

}

A ideia é pesquisar os registros das 4 marcações no banco de dados é antes de apresentar na tela calcular o tempo trabalhado identificando se houve horas positivas ou negativas no dia para cada registro diário. Quando faço a pesquisa com um único registro, funciona beleza, mas quando a pesquisa tem mais registros não dá certo pois apresenta os mesmos valores das horas trabalhadas.

Como disse anteriormente, a variável List adicionaTotal sobrescreve os valores anteriores, ou seja, se pesquisar 10 registros, a variável adicionaTotal acumula os 10 registros com os mesmos valores.

Salve salve, Igomes!!

Consegui resolver a parada meu amigo. Após sua orientação, resolvi incluir em adicionaTotal a seguinte linha de comando:
{
guarda[0]=(p.getId());
guarda[1]=(p.getMatricula());
guarda[2]=(p.getNome());
guarda[3]=(p.getDataponto());
guarda[4]=(p.getRegistroentrada());
guarda[5]=(p.getSaidaintervalo());
guarda[6]=(p.getRetornointervalo());
guarda[7]=(p.getRegistrosaida());
guarda[8]=(saldoHora);
guarda[9]=(p.getObs());
adicionaTotal.add(new ArrayList(guarda));
}
conforme vc indicou no texto supracitado. Valeu muito!!!
Muito obrigado.