Pergunta

Isso funciona bem

if ((a >= 40 && a <= 50) || (a >= 60 && a <= 80))
// do something

Como posso fazer o inverso dele?

if ((a < 40 && a > 50) || (a < 60 && a > 80))
// do something

O código não funciona como esperado. Eu quero algo como se não (condição)

Foi útil?

Solução

Você pode querer olhar em leis de De Morgan .

1. !((a >= 40 && a <= 50) || (a >= 60 && a <= 80))

2. (!(a >= 40 && a <= 50) && !(a >= 60 && a <= 80))

3. ((!(a >= 40) || !(a <= 50)) && (!(a >= 60) || !(a <= 80))

4. ((a < 40 || a > 50) && (a < 60 || a > 80))


or in other words: (a < 40 || (50 < a && a < 60) || 80 < a)

Outras dicas

if ((a < 40 || a > 50) && (a < 60 || a > 80))
// do something

Enquanto eu recomendaria para descobrir como fazê-lo funcionar corretamente (reescrevendo-a)

if (!((a >= 40 && a <= 50) || (a >= 60 && a <= 80)))

deve funcionar eu acredito.

Você precisa de um "OR"

if ((a < 40 || a > 50) && (a < 60 || a > 80))

Ou, um NÃO

if (!((a >= 40 && a <= 50) || (a >= 60 && a <= 80)))

Você segundo exemplo

if ((a < 40 && a > 50) || (a < 60 && a > 80))

não faz sentido como a não podem ser ao mesmo tempo menos do que 40 e maior do que 50 (ou menos do que 60 e maior do que 80), ao mesmo tempo.

Algo como

if (!((a < 40 && a > 50) || (a < 60 && a > 80)))

ou

if ((a < 40 || a > 50) && (a < 60 || a > 80))
if (!((a >= 40 && a <= 50) || (a >= 60 && a <= 80)))

Assumindo que você quer o equivalente a

if ( not ((a >= 40 && a <= 50) || (a >= 60 && a <= 80)) )

então, se você pensar sobre a expressão original, deve ser

if (a < 40 || (a > 50 && a < 60) || a > 80)

A primeira expressão está permitindo a para ser um número de 40 a 50 ou de 60 a 80. Negar que em Inglês e você quer um número inferior a 40 ou entre 50 e 60 ou superior 80.

Leis de De Morgan você pode obter uma resposta precisa, mas eu prefiro código que você pode ler em voz alta e fazer sentido.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top