Pregunta

Esto funciona bien

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

¿Cómo hago al revés?

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

El código no funciona como se esperaba. Quiero algo como si no (condición)

¿Fue útil?

Solución

Es posible que desee consultar las leyes 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)

Otros consejos

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

Si bien recomendaría descubrir cómo hacer que funcione correctamente (reescribiéndolo)

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

debería funcionar, creo.

Necesita un " O "

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

O, un NO

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

Tu segundo ejemplo

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

no tiene sentido ya que a no puede ser menor que 40 y mayor que 50 (o menor que 60 y mayor que 80) al mismo tiempo.

Algo así

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

o

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

Suponiendo que desea el equivalente de

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

entonces, si piensa en la expresión original, debería ser

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

La primera expresión es permitir que a sea un número del 40 al 50 o del 60 al 80. Niegue eso en inglés y desea un número menor que 40 o entre 50 y 60 o más de 80.

Las leyes de De Morgan pueden darle una respuesta precisa, pero prefiero un código que pueda leer en voz alta y tener sentido.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top