Почему мой c!= 'O' || c!= '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'
, Зачем?
5 ответов
Это должно быть if(c!='o' && c!='x')
вместо if(c!='o' || c!='x')
, Если вы используете or
Оператор логическое выражение будет всегда истинным.
Состояние (c != 'o' || c != 'x')
никогда не может быть ложным. Если c
является 'o'
, затем c != 'x'
будет истинным, и условие ИЛИ выполнено. Если c
является 'x'
, затем c != 'o'
будет истинным, и условие ИЛИ выполнено.
Ты хочешь &&
(И не ||
(ИЛИ ЖЕ):
while (c != 'o' && c != 'x') {
// ...
}
"В то время как c
не является 'o'
А ТАКЖЕ c
это НЕ `'x'..." (например, это ни один из них).
Или используйте закон Де Моргана, описанный здесь:
while (!(c == 'o' || c == 'x')) {
// ...
}
"Хотя это не правда, что (c
является 'o'
или же c
является 'x'
)..."
Почему мой
c != 'o' || c != 'x'
условие всегда верно?
Выражение объединяет два подвыражения с использованием логического OR
оператор (||
). Выражение true
если хотя бы одно из подвыражений true
, Для того, чтобы быть false
оба подвыражения, которые он соединяет, должны быть false
,
Подвыражения c != 'o'
а также c != 'x'
,
Первое подвыражение c != 'o'
является false
когда c == 'o'
, То же самое для второго; это false
когда c == 'x'
,
Обратите внимание, что они не могут быть false
в то же время, потому что c
не может быть 'o'
а также 'x'
в то же время.
Даже когда вы вводите x или вводите o в этом случае, если условие оценивается как true и, следовательно, game_start остается false.
так должно быть if(c!='o' && c!='x')
или используйте более прямой путь
if(c == 'o' || c == 'x')
game_start=true;
else
System.out.println("you can only enter o or x!");
Условие должно быть if(!(c=='o' || c=='x'))
или же if(c!='o' && c!='x')