Problema na logica. [RESOLVIDO]

2 respostas
N

Pessoal acredito que a logica esteja correta. Porem o java nao pensa como eu hehehhe…

Tenho o metodo

private OSDiario d; public void populaListaMenor(List<OSDiario> listaCompleta, List<OSDiario> listaMenor) { for (OSDiario cont : listaCompleta) { if (util.verifica(cont, listaMenor)) { System.out.println("ACHOU!!!"); } else { System.out.println("FALSOOO!!!"); d = cont; d.setValorItensLiq(BigDecimal.ZERO); d.setValorServicosLiq(BigDecimal.ZERO); listaMenor.add(d); } } }

Este método recebe duas listas do mesmo objeto, uma com menor registros(listaMenor) e outra com maior quantidade de registros(listaMaior). Este metodo verifica se a empresa da listaMaior está na listaMenor. Se nao estiver ele adiciona a empresa e zera os valores na Menor…Reparem que eu adiciono o “d” zerado na listaMenor, nao deveria zerar as duas, apenas uma.

funciona que é uma beleza, mas quando termina FOR… ele devolve a listaMenor preenchida, porem zera todos os valores da lista Maior, deixando apenas as empresas.

2 Respostas

A

O Java está certo, você altera o mesmo objeto. Para solucionar, precisa fazer uma cópia antes de alterar.
O “d = cont”, você está copiando apenas a referência ao objeto, no final, d e cont apontam para o mesmo objeto.

N

Principio basico do java… Desculpe a gafe. Você estava correto.
Corrigi com um d = new OSDiario();

Obrigado.

Criado 23 de janeiro de 2015
Ultima resposta 23 de jan. de 2015
Respostas 2
Participantes 2