为什么我的c != 'o' || c != 'x' 条件总是为真?
Why is my c != 'o' || c != 'x' condition always true?
我有这个循环语句,我将使用类似 C 的语法来表达它(C、C++、Java、JavaScript、PHP 等都使用类似的语法):
while (c != 'o' || c != 'x') {
c = getANewValue();
}
我希望它 运行 直到我得到 'o'
或 'x'
,但它永远不会退出,即使 c
是 'o'
或 'x'
。为什么不呢?
我也试过使用 if
:
if (c != 'o' || c != 'x') {
// Show an error saying it must be either 'o' or 'x'
}
但这也总是显示错误消息,即使 c
是 'o'
或 'x'
。为什么?
必须是if(c!='o' && c!='x')
而不是if(c!='o' || c!='x')
。如果您使用 or
运算符,布尔表达式将始终为真。
条件应该是if(!(c=='o' || c=='x'))
或者if(c!='o' && c!='x')
即使您在这种情况下输入 x 或输入 o,如果条件计算结果为真,因此 game_start 仍然为假。
应该是if(c!='o' && c!='x')
或者使用更直接的方式
if(c == 'o' || c == 'x')
game_start=true;
else
System.out.println("you can only enter o or x!");
条件(c != 'o' || c != 'x')
永远不会为假。如果c
为'o'
,则c != 'x'
为真,OR条件成立。如果c
为'x'
,则c != 'o'
为真,OR条件成立。
你想要&&
(AND),而不是||
(OR):
while (c != 'o' && c != 'x') {
// ...
}
"While c
is NOT 'o'
AND c
is NOT `'x'..."(例如,两者都不是)。
或者使用德摩根定律,covered here:
while (!(c == 'o' || c == 'x')) {
// ...
}
"While it's NOT true that (c
is 'o'
or c
is 'x'
)..."
Why is my c != 'o' || c != 'x'
condition always true?
该表达式使用逻辑 OR
运算符 (||
) 组合两个子表达式。如果至少一个子表达式是 true
,则表达式是 true
。为了成为false
,它连接的两个子表达式必须是false
.
子表达式为c != 'o'
和c != 'x'
。
当c == 'o'
时第一个子表达式c != 'o'
是false
。第二个也一样;当 c == 'x'
.
时是 false
请注意它们不能同时是false
,因为c
不能同时是'o'
和'x'
。
我有这个循环语句,我将使用类似 C 的语法来表达它(C、C++、Java、JavaScript、PHP 等都使用类似的语法):
while (c != 'o' || c != 'x') {
c = getANewValue();
}
我希望它 运行 直到我得到 'o'
或 'x'
,但它永远不会退出,即使 c
是 'o'
或 'x'
。为什么不呢?
我也试过使用 if
:
if (c != 'o' || c != 'x') {
// Show an error saying it must be either 'o' or 'x'
}
但这也总是显示错误消息,即使 c
是 'o'
或 'x'
。为什么?
必须是if(c!='o' && c!='x')
而不是if(c!='o' || c!='x')
。如果您使用 or
运算符,布尔表达式将始终为真。
条件应该是if(!(c=='o' || c=='x'))
或者if(c!='o' && c!='x')
即使您在这种情况下输入 x 或输入 o,如果条件计算结果为真,因此 game_start 仍然为假。
应该是if(c!='o' && c!='x')
或者使用更直接的方式
if(c == 'o' || c == 'x')
game_start=true;
else
System.out.println("you can only enter o or x!");
条件(c != 'o' || c != 'x')
永远不会为假。如果c
为'o'
,则c != 'x'
为真,OR条件成立。如果c
为'x'
,则c != 'o'
为真,OR条件成立。
你想要&&
(AND),而不是||
(OR):
while (c != 'o' && c != 'x') {
// ...
}
"While c
is NOT 'o'
AND c
is NOT `'x'..."(例如,两者都不是)。
或者使用德摩根定律,covered here:
while (!(c == 'o' || c == 'x')) {
// ...
}
"While it's NOT true that (c
is 'o'
or c
is 'x'
)..."
Why is my
c != 'o' || c != 'x'
condition always true?
该表达式使用逻辑 OR
运算符 (||
) 组合两个子表达式。如果至少一个子表达式是 true
,则表达式是 true
。为了成为false
,它连接的两个子表达式必须是false
.
子表达式为c != 'o'
和c != 'x'
。
当c == 'o'
时第一个子表达式c != 'o'
是false
。第二个也一样;当 c == 'x'
.
false
请注意它们不能同时是false
,因为c
不能同时是'o'
和'x'
。