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.
Esta pregunta ya tiene una respuesta aquí:
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!");