[RESOLIDO]Erro em comparação Dates

4 respostas
S

Bom, eu preciso pegar a data de todos os contratos de um funcionario e comparar a data Minima e Maxima, e deletar se o funcionario não tinha nenhum contrato no periodo, ou seja filtrar uma lista de funcionarios…
Só que quando eu comparo e jogo as informações no JTable, alguns estão dentro do periodo como previsto, mas outros não são filtrados, sendo que as datas não deveriam entrar…

for (int i = 0; i < FuncionarioDAO.funcionarios.size(); i++) { Funcionario f = FuncionarioDAO.funcionarios.get(i); for (int j = 0; j < f.getContrato().size(); j++) { if (!(f.getContrato().get(j).getDataEntrada() == null) && (!(f.getContrato().get(j).getDataSaida() == null))) { if ((f.getContrato().get(j).getDataEntrada().before(dataMinima))) { if ((f.getContrato().get(j).getDataSaida().before(dataMinima))) { f.getContrato().remove(j); if(f.getContrato().isEmpty()) { FuncionarioDAO.funcionarios.remove(i); } } else if ((f.getContrato().get(j).getDataEntrada().after(dataMaxima))) { if ((f.getContrato().get(j).getDataSaida().after(dataMaxima))) { f.getContrato().remove(j); if(f.getContrato().isEmpty()) { FuncionarioDAO.funcionarios.remove(i); } } } } } } }

Gostaria de saber qual o meu erro de lógica, pois já fiz de tudo, as condições testam se o funcionario foi contrado depois do periodo ou antes e saiu antes…

4 Respostas

karh-el

Não seria:

if (!(f.getContrato().get(j).getDataEntrada() == null) || (!(f.getContrato().get(j).getDataSaida() == null)))

Pelo que entendi se a data de entrada for null, então o funcionario não existe - não foi contratado - e se a data de saída for
null o funcionario não foi demitido, ou seja, faz parte do quadro da empresa.

S

karh-el:
Não seria:

if (!(f.getContrato().get(j).getDataEntrada() == null) || (!(f.getContrato().get(j).getDataSaida() == null)))

Pelo que entendi se a data de entrada for null, então o funcionario não existe - não foi contratado - e se a data de saída for
null o funcionario não foi demitido, ou seja, faz parte do quadro da empresa.

Essa parte do código é para testar se uma das datas é nula, porque na planilha do excel de onde eu estou pegando os dados alguns contratos não terminaram ainda, então a data de saida estão nulas, fiz essa verificação para não passar uma data null para testar com after ou before senão ocorre uma NullPointeException

S

Bom, achei a solução quebrando a cabeça aqui, vou postar caso alguem tenha alguma duvida parecida:

for (int i = 0; i < FuncionarioDAO.funcionarios.size(); i++) {
                    Funcionario f = FuncionarioDAO.funcionarios.get(i);
                    for (int j = 0; j < f.getContrato().size(); j++) {
                        if (!(f.getContrato().get(j).getDataEntrada() == null) && (!(f.getContrato().get(j).getDataSaida() == null))) {
                            if ((f.getContrato().get(j).getDataEntrada().before(dataMinima))) {
                                if ((f.getContrato().get(j).getDataSaida().before(dataMinima))) {
                                    f.getContrato().remove(j);
                                    j--;
                                }
                                if (f.getContrato().isEmpty()) {
                                    FuncionarioDAO.funcionarios.remove(i);
                                    i--;
                                }
                            } else if ((f.getContrato().get(j).getDataEntrada().after(dataMaxima))) {
                                if ((f.getContrato().get(j).getDataSaida().after(dataMaxima))) {
                                    f.getContrato().remove(j);
                                    j--;
                                    if (f.getContrato().isEmpty()) {
                                        FuncionarioDAO.funcionarios.remove(i);
                                        i--;
                                    }
                                }
                            }
                        }
                    }
                }

Quando eu removia um Contrato ou um Funcionario, os indices diminuiam, e então o for não passava pelo indice seguinte, já que ele tinha diminuido, colando o j-- e o i-- fez que o loop voltasse a testar o Contrato e ou Funcionario!

karh-el

Erros de lógica são os mais difíceis de descobrir.
Parabéns.

Criado 26 de agosto de 2009
Ultima resposta 27 de ago. de 2009
Respostas 4
Participantes 2