Почему мой 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')

Другие вопросы по тегам