2011-03-28 13 views
18

Tengo dos variables que pueden ser verdaderas o falsas. Los obtengo al consultar en la base de datos la presencia o ausencia de ciertos identificadores de productos.Formas mejores de encontrar si ambas variables son verdaderas o ambas son falsas

Ahora tengo que configurar otra variable que sea verdadera o falsa. será verdadero valor cuando ambas variables sean verdaderas o ambas sean falsas. Será falso el valor de uno es verdadero y el otro es falso.

en la actualidad que cuidar de él mediante sentencia if

if (v1 == true && v2 == true) 
result = true; 
else if (v1==false && v2 == false) 
result = true; 
else if (v1 == true && v2 == false) 
result = false; 
else if (v1==false && v2 == true) 
result = false; 

Es existe una mejor manera de hacer esto?

+10

si (variable == true) es un infierno de un anti patrón, bastante famoso, por cierto :) –

Respuesta

11

Usted puede utilizar el operador lógico XOR y lógica NO operador como:

result = !(v1^v2); 
+2

Esto es más complicado de lo necesario, ver La respuesta de DXM – jmg

+4

@jmg: Muy cierto. He votado por DXM. – codaddict

98

puedo estar perdiendo algo muy fundamental, pero voy a darle una oportunidad:

result = (v1 == v2); 
+9

En realidad, los paréntesis son incluso opcionales aquí, ya que el operador de asignación casi tiene la precedencia más baja entre todos en aquellos lenguajes como Java, C++, C. – Benoit

+5

¿Qué pasa con las respuestas de Java relacionadas con los booleanos que reciben tantos votos ascendentes (ver también http: // stackoverflow.com/questions/3907384/whats-the-most-concise-way-to-get-the-inverse-of-a-java-boolean-value/3907396#3907396)? : D – BoltClock

+0

+1: siempre uso esta forma de verificación. – Raedwald

2

uso del Operador XOR (^):

boolean result = !(v1^v2) 
-4

¿Por qué no comparar los dos?

if(v1 == v2) result = true; 
+0

-1 No devuelve falso en el caso contrario. – bluish

-3
if(v1 == v2) 
return true; 
else 
return false; 
+1

o return v1 == v2 – Petruza

-2

La forma más simple es, si las dos variables son iguales, entonces debe ser cierto y si cualquiera es falso, es falso. mira esto.

if(v1 == v2) 
    return true; 
else 
    return false; 
+0

-1 código demasiado para algo tan simple – bluish

3

Este tipo de problema, dada una tabla de verdad, minimizar la lógica necesaria para reproducir los valores de verdad, es a menudo muy bien tratada, con Karnaugh Maps

Su tabla de verdad que aquí se parece a:

 
v1 v2 f(v1, v2) 
    t t  t 
    t f  f 
    f t  f 
    f f  t 

Y, de hecho, como otros han señalado, dada esa tabla de verdad, ¡una familiaridad básica con la lógica debería producir inmediatamente la función! xor

Sin embargo, si se toma la tabla de verdad y la dibuja como un mapa de Karnaugh, que parece:

 

     v2 
     f t 
    --------- 
v f| t | f | 
1 t| f | t | 
    --------- 

Y la función que parece:! V1 v2 || v1v2 que si miras a 2 variable karnaugh map examples de nuevo se puede ver para simplificarlo! xor

Es cierto que 2 mapas karnaugh variables probablemente se tratan mejor con las operaciones lógicas ordinarias por pozo, familiaridad y memorización. Pero cuando se expande más allá de 2 variables, los mapas de Karnaugh son muy esclarecedores, debe verlos.

+0

Elección interesante de soluciones upvoted, tiendo a pensar que result =! (V1 xor v2) es más claro que result = (v1 == v2). –

+20

Le sugiero educadamente que tome un poco más de café ... si encuentra '! (A^b)' más claro que 'a == b', entonces todavía debe estar dormido. Y teniendo una pesadilla. –

Cuestiones relacionadas