Erro ao fazer comparação com for. Urgente. (RESOLVIDO)

5 respostas
G

Oi pessoal,

estou criando um relatório onde tenho duas listas e preciso compará-las da seguinte maneira…
tenho la a sigla e data, e comparo pra ver se é igual…
se forem iguais, vou pro próximo passo…
que é comparar as horas de entradas e saida…
tipo se hora_entrada for diferente de menor_horario eu exibo
e se hora_saida for diferente que maior_horario eu exibo também…
e se forem iguais não … então continuo percorrendo a lista…
e na hora de fazer esse maldito for de comparação não consigo…

porque assim, na minha lista TimeSheet sei se é entrada ou saida pelo flag_destino…
já na listaBiometrico está separado direto …
então no for preciso colocar essa condição de se flag_destino = entrada/saida.
e ai não consigo fazer… =/

e também na hora de dar um add.
ele diz que add tem que ser int. --’.

alguém pode me ajudar, por favor !!

segue meu for e depois meu DAO com as duas listas.

public List retornaCompTimeSheetBiometrico(Date dataIni,Date dataFim) {
        List<CompTimeSheetBiometrico> listaTimeSheetBio = new ArrayList<CompTimeSheetBiometrico>();
        List<TimeSheetBio> listaTimeSheet = retornaConsultaTimeSheet(dataIni, dataFim);
        List<BiometricoTS> listaBiometrico = retornaConsultaBiometrico(dataIni, dataFim);

        for (int i = 0; i < listaTimeSheet.size(); i++) {
            for (int j = 0; j < listaBiometrico.size(); j++) {
                if (listaTimeSheet.get(i).getPessoa().toLowerCase().equals(listaBiometrico.get(j).getSigla())
                  & listaTimeSheet.get(i).getDt_dia().equals(listaBiometrico.get(j).getDia())) {
                //  & (listaTimeSheet.get(i).getFlag_destino().equals("entrada")) != (listaBiometrico.get(j).getMenor_horario())
                //  & (listaTimeSheet.get(i).getFlag_destino().equals("saida")) != (listaBiometrico.get(j).getMaior_horario())) {
                    break;
                }
           }
        }
         return listaTimeSheet;
    }
public List retornaConsultaTimeSheet(Date dataIni,Date dataFim) {
        Session sessao = HibernateUtil.getSession();
        List<TimeSheetBio> tbCompTimeSheetBio = new ArrayList<TimeSheetBio>();
        String SQL;

        //Consulta em SQL Nativo
        //retorna uma lista dos funcionarios que preencheram o Time-Sheet
        SQL = "SELECT h.pessoa, f.nome, h.n_apropriacao, h.dt_dia as data, h.hora, h.flag_destino ";
        SQL += "FROM horario_unico h, funcionario f ";
        SQL += "WHERE to_date(h.dia||'/'||h.mes||'/'||h.ano, 'DD/MM/YYYY') BETWEEN :dataIni AND :dataFim ";
        SQL += "AND(h.flag_destino ='entrada' or h.flag_destino='saida') ";
        SQL += "AND h.pessoa=lower(f.sigla) ";
        SQL += "ORDER BY h.dt_dia, h.pessoa, h.flag_destino ";

        try {
            sessao.beginTransaction();

            Query select = sessao.createSQLQuery(SQL);
            select.setDate("dataIni", dataIni);
            select.setDate("dataFim", dataFim);
            List resultado = select.list();

            for (Iterator it = resultado.iterator(); it.hasNext();) {
                Object[] obj = (Object[]) it.next();
                TimeSheetBio comp = new TimeSheetBio();

                comp.setPessoa(obj[0].toString());
                comp.setNome(obj[1].toString());
                comp.setN_apropriacao(Integer.parseInt(obj[2].toString()));
                comp.setDt_dia(new SimpleDateFormat("yyyy-MM-dd").parse(obj[3].toString()));
                comp.setHora(new SimpleDateFormat("HH:mm").parse(obj[4].toString()));
                comp.setFlag_destino(obj[5].toString());

                tbCompTimeSheetBio.add(comp);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            sessao.close();
        }
        return tbCompTimeSheetBio;
    }

      public List retornaConsultaBiometrico(Date dataIni, Date dataFim) {
        Session sessao = HibernateUtil.getSession();
        List<BiometricoTS> TbBiometrico = new ArrayList<BiometricoTS>();
        String SQL;

        //Consulta em SQL Nativo
        //retorna uma lista com o menor e o maior horario de cada funcionario no biometrico
        SQL = "SELECT tb.sigla, tb.dia, min(horario) as menor_horario, max(horario) as maior_horario ";
        SQL += "FROM tb_biometrico tb ";
        SQL += "WHERE tb.dia between :dataIni AND :dataFim ";
        SQL += "GROUP BY tb.dia, tb.sigla ";
        SQL += "ORDER BY tb.dia, tb.sigla ";

        try {
            sessao.beginTransaction();

            Query select = sessao.createSQLQuery(SQL);
            select.setDate("dataIni", dataIni);
            select.setDate("dataFim", dataFim);
            List resultado = select.list();

            for (Iterator it = resultado.iterator(); it.hasNext();) {
                Object[] obj = (Object[]) it.next();
                BiometricoTS bio = new BiometricoTS();

                bio.setSigla(obj[0].toString());
                bio.setDia(new SimpleDateFormat("yyyy-MM-dd").parse(obj[1].toString()));
                bio.setMenor_horario(obj[2].toString());
                bio.setMaior_horario(obj[3].toString());

                TbBiometrico.add(bio);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            sessao.close();
        }
        return TbBiometrico;
    }

5 Respostas

A

ô carinha, fala direito rapaiz! :slight_smile: Que negócio é esse de que o add tem que ser int?
Outra coisa, o “&” , simples, é uma comparação muuuito mais pesada que “&&”

Fi, equals não retorna o horário, só retorna true ou false. Então você tem que colocar mais um If aí, dentro do if dentro do for.

String flag_destino = listaTimeSheet.get(i).getFlag_destino();
if("entrada".equals(flag_destino)) {
 // o que acontece quando o flag de destino é uma entrada?
} else if("saida". equals(flag_destino)) {
// o que acontece quando o flag de destino é uma saída?
}

E tira esse break daí porque ele vai parar o seu segundo for, você quer varrer a lista inteira e pegar os carinhas que satisfazem esses critérios, certo?

Divirta-se.

G

abmpicoli:
ô carinha, fala direito rapaiz! :slight_smile: Que negócio é esse de que o add tem que ser int?
Outra coisa, o “&” , simples, é uma comparação muuuito mais pesada que “&&”

Fi, equals não retorna o horário, só retorna true ou false. Então você tem que colocar mais um If aí, dentro do if dentro do for.

String flag_destino = listaTimeSheet.get(i).getFlag_destino();
if("entrada".equals(flag_destino)) {
 // o que acontece quando o flag de destino é uma entrada?
} else if("saida". equals(flag_destino)) {
// o que acontece quando o flag de destino é uma saída?
}

E tira esse break daí porque ele vai parar o seu segundo for, você quer varrer a lista inteira e pegar os carinhas que satisfazem esses critérios, certo?

Divirta-se.

Certo .
valeu pela ajuda…
arrumando meu for …ficou assim . .

for (int i = 0; i < listaTimeSheet.size(); i++) {
            for (int j = 0; j < listaBiometrico.size(); j++) {
                if (listaTimeSheet.get(i).getSigla().toLowerCase().equals(listaBiometrico.get(j).getSigla())
                   & listaTimeSheet.get(i).getData().equals(listaBiometrico.get(j).getData())) {
                    if (listaTimeSheet.get(i).getFlag_destino().equals("entrada")) {
                        if (!listaTimeSheet.get(i).getHora().equals(listaBiometrico.get(j).getMenor_horario()));
           //aqui se for verdadeira a afirmação . .ele tem que salvar o getHora() como entradaTS e o getMenor_Horario como entrada biometrico     
                    } else if (listaTimeSheet.get(i).getFlag_destino().equals("saida")) {
                        if (!listaTimeSheet.get(i).getHora().equals(listaBiometrico.get(j).getMaior_horario())); 
                      //aqui se for verdadeira a afirmação . .ele tem que salvar o getHora() como saidaTS e o getMaior_Horario como Saida Biometrico.

                    }
                }
            }
        }
        }
        return listaTsBio;
    }

só que esses campos que eu comentei o entrada/saidaTS e o entrada/saidaBiometrico eles estão em uma outra lista criada…
como add esses valores nessa lista dentro do for ?
nessa lista tem os campos que preciso pra exibir no relatório … .

Valeu.

G

tentei assim . .
add um for int K … pra poder add a lista…
mas não deu certo. .quando acrescento esse K ele nem entra no primeiro If.
gera o relatório em branco e não aponta erro nenhum =/ .

Alguém pode me ajudar, por favor !

for (int i = 0; i &lt; listaTimeSheet.size(); i++) { for (int j = 0; j &lt; listaBiometrico.size(); j++) { for (int k = 0; k &lt; listaTsBio.size(); k++) { if (listaTimeSheet.get(i).getSigla().toLowerCase().equals(listaBiometrico.get(j).getSigla()) & listaTimeSheet.get(i).getData().equals(listaBiometrico.get(j).getData())) { if (listaTimeSheet.get(i).getFlag_destino().equals(&quot;entrada&quot;)) { if (!listaTimeSheet.get(i).getHora().equals(listaBiometrico.get(j).getMenor_horario())); listaTimeSheet.get(i).setHora(listaTsBio.get(k).getEntradaTS()); listaBiometrico.get(j).setMenor_horario(listaTsBio.get(k).getEntradaBio()); } else if (listaTimeSheet.get(i).getFlag_destino().equals(&quot;saida&quot;)) { if (!listaTimeSheet.get(i).getHora().equals(listaBiometrico.get(j).getMaior_horario())); listaTimeSheet.get(i).setHora(listaTsBio.get(k).getSaidaTS()); listaBiometrico.get(j).setMaior_horario(listaTsBio.get(k).getSaidaBio()); } } } } return listaTsBio; }

e tentei fazendo sem o k também…
ai ele entra no if. .gera o relatório…
mas os campos dos horários ficam nulos…
=/

ficou assim

for (int i = 0; i &lt; listaTimeSheet.size(); i++) {
            for (int j = 0; j &lt; listaBiometrico.size(); j++) {
                    if (listaTimeSheet.get(i).getSigla().toLowerCase().equals(listaBiometrico.get(j).getSigla())
                      & listaTimeSheet.get(i).getData().equals(listaBiometrico.get(j).getData())) {
                        if (listaTimeSheet.get(i).getFlag_destino().equals("entrada")) {
                            if (!listaTimeSheet.get(i).getHora().equals(listaBiometrico.get(j).getMenor_horario())) {
                               listaTimeSheet.get(i).setHora(listaTimeSheet.get(i).getEntradaTS());
                               listaBiometrico.get(j).setMenor_horario(listaTimeSheet.get(i).getEntradaBio());
                            }
                        } else if (listaTimeSheet.get(i).getFlag_destino().equals("saida")) {
                            if (!listaTimeSheet.get(i).getHora().equals(listaBiometrico.get(j).getMaior_horario())) {
                               listaTimeSheet.get(i).setHora(listaTimeSheet.get(i).getSaidaTS());
                               listaBiometrico.get(j).setMaior_horario(listaTimeSheet.get(i).getSaidaBio());
                            }
                        }
                    }
                }
            }

Alguém me ajuda. por favor.

tenho até amanhã pra terminar isso =( .

A

Ô, Fi, tu tá pirando na batatinha mesmo, né???

Cara, se você achou um cara que satisfaz os critérios, você tem é que montar uma instância da classe CompTimeSheetBiométrico, que é o seu retorno, não é? Popular os campos desse cara e dar um add na lista. Só isso…

tipo assim

if(<<beleza, o biométrico bate com o timesheet e esse é o cara>>) {
 CompTimeSheetBiometrico x = new CompTimeSheetBiometrico();
  // dá os sets nas propriedades ...
  x.setBanana(....);
  //
  //e dá um add.
  listaTimeSheetBio.add(x);
}

Carinha, tou parando de acompanhar esse tópico. Boa sorte.

G

eu não to conseguindo atualizar aqui…

mas eu ja fiz isso que você falou …
mas está gerando errado o relatório .

mas Valeu .

me viro a partir de agora.

Abraços.

Criado 1 de fevereiro de 2012
Ultima resposta 2 de fev. de 2012
Respostas 5
Participantes 2