conditional-statements logical-operators logical-or

conditional statements - ¿Por qué es mi c!=''O'' || c!=''x'' condición siempre verdadera?



conditional-statements logical-operators (5)

¿Por qué es mi c != ''o'' || c != ''x'' c != ''o'' || c != ''x'' condición siempre verdadera?

La expresión combina dos subexpresiones utilizando el operador lógico OR ( || ). La expresión es true si al menos una de las subexpresiones es true . Para ser false , ambas sub-expresiones que conecta deben ser false .

Las subexpresiones son c != ''o'' y c != ''x'' .

La primera sub-expresión c != ''o'' es false cuando c == ''o'' . Lo mismo para el segundo; es false cuando c == ''x'' .

Tenga en cuenta que no pueden ser false al mismo tiempo porque c no puede ser ''o'' y ''x'' al mismo tiempo.

Tengo esta declaración de bucle, que expresaré usando una sintaxis similar a C (C, C ++, Java, JavaScript, PHP, etc.todos usan una sintaxis similar):

while (c != ''o'' || c != ''x'') { c = getANewValue(); }

Quiero que se ejecute hasta que obtenga una ''o'' o ''x'' , pero nunca sale, incluso cuando c es ''o'' o ''x'' . Por qué no?

También he intentado usar if :

if (c != ''o'' || c != ''x'') { // Show an error saying it must be either ''o'' or ''x'' }

pero eso también siempre muestra el mensaje de error, incluso cuando c es ''o'' o ''x'' . ¿Por qué?


Debe ser if(c!=''o'' && c!=''x'') lugar de if(c!=''o'' || c!=''x'') . Si usa el operador or la expresión booleana siempre será verdadera.


La condición (c != ''o'' || c != ''x'') nunca puede ser falsa. Si c es ''o'' , entonces c != ''x'' será verdadero y se cumplirá la condición OR. Si c es ''x'' , entonces c != ''o'' será verdadero y se cumple la condición OR.

Desea && (AND), no || (O):

while (c != ''o'' && c != ''x'') { // ... }

"Mientras c NO es ''o'' Y c NO es '''' x ''..." (por ejemplo, no es ninguno de ellos).

O use la ley de De Morgan, cubierta aquí :

while (!(c == ''o'' || c == ''x'')) { // ... }

"Si bien NO es cierto que ( c es ''o'' o c es ''x'' ) ..."


La condición debe ser if(!(c==''o'' || c==''x'')) o if(c!=''o'' && c!=''x'')


incluso cuando ingresas xo ingresas o en ese caso si la condición se evalúa como verdadera y, por lo tanto, game_start sigue siendo falsa.

debería ser if(c!=''o'' && c!=''x'') o usar una forma más directa

if(c == ''o'' || c == ''x'') game_start=true; else System.out.println("you can only enter o or x!");