¿Por qué mi c! = ‘O’ || c! = ‘x’ condición siempre es cierto?

Tengo esta statement de bucle, que expressé usando syntax similar a C (C, C ++, Java, JavaScript, PHP, etc. todos usan una syntax similar):

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

Quiero que se ejecute hasta que obtenga una 'o' o 'x' , pero nunca se cierra, 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 muestra siempre 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 O. Si c es 'x' , entonces c != 'o' será verdadero y se cumplirá la condición O.

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

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

“Mientras que c NO es 'o' Y c no es ” x ‘…” (p. Ej., 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' ) …”

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

La expresión combina dos expresiones secundarias utilizando el operador OR lógico ( || ). La expresión es true si al menos una de las sub expresiones es true . Para que sea false , ambas subexpresiones 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.

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

incluso cuando ingresa x o ingresa o en ese caso si la condición se evalúa como verdadera y, por lo tanto, game_start permanece en falso.

debería ser if(c!='o' && c!='x') o usar un camino más directo

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