Problema com vetores e If

3 respostas
J

Estou com um problema estranho. Coloco três valores dentro de um vetor, e verifico se eles são menores do que um certo valor. Nem todos são menores, apesar de usar a condição &&, eu ainda assim entro no If.
Segue a parte do código onde tenho esse problema. Ele faz parte de um código muito mais complexo.

List<Double> valoresFinal = new ArrayList<Double>();
adiciono os valores em umvetor

if((valoresFinal.get(0)<15000) && (valoresFinal.get(1)<15000)  && (valoresFinal.get(2)<15000))
{

                portaAtual.setStatusPorta(false);
                portaDAO.atualizar(portaAtual);
                System.out.println("Status:: false");
                System.out.println("SIM NESSE IF");
                System.out.println("Valor1"+valoresFinal.get(0));
                System.out.println("Valor2"+valoresFinal.get(1));
                System.out.println("Valor3"+valoresFinal.get(2));
                if(portaAtual.isStatusPorta() != portaAtual.isStatusPortaRequerido())
                {
                    statusCorreto(portaAtual);
                }
            }
           }

Esse trecho de código me retorna isso:

Atualizando…

Status:: false

SIM NESSE IF
Valor18496.0
Valor24223.999999999999
Valor313256.0

Como podem ver os valores são maiores que 15000 mas ainda assim estou entrando no if.

Alguém tem alguma ideia do porque?

3 Respostas

TerraSkilll

Seus ifs estão funcionando de acordo. Nenhum dos valores é maior que 15000. O problema parece ser a confusão causada pelas strings que você usou no System.out.println. Veja que os valores lidos são:

8496.0
4223.999999999999
13256.0

Todos menores que 15000.

O 1, 2 e 3 na frente desses vem da String que você está exibindo (Valor1, Valor2 e Valor3).

Para ficar mais claro, mude seu programa para algo assim:

System.out.println("Status:: false");
System.out.println("SIM NESSE IF");
System.out.println("Primeiro Valor: "+valoresFinal.get(0));
System.out.println("Segundo Valor: "+valoresFinal.get(1));
System.out.println("Terceiro Valor: "+valoresFinal.get(2));

Veja um exemplo: https://ideone.com/poXEFm

Abraço

J

Obrigado! o sistema é tão grande que fiquei cego para isso.

Eduardo_Maranata10

Complementando a resposta do TerraSkilll, fiz um algoritmo aqui :

final Double valor = 1500.0;

		List<Double> valoresFinal = new ArrayList<Double>();

		valoresFinal.addAll(Arrays.asList(2000.0, 3000.0, 4000.0));

		for (Double v : valoresFinal) {
			if (v < valor) {
				System.out.println("SIM NESSE IF");
				System.out.println("Status:: false");
				for (Double d : valoresFinal) {
					System.out.println("Valor : " + d);
				}
			}
		}
Criado 30 de junho de 2016
Ultima resposta 30 de jun. de 2016
Respostas 3
Participantes 3