2015-07-29 4 views
1

Уже если условие, как показано нижеПравильный синтаксис для условия «ИЛИ» внутри «IF».?

if ((listbox != "lhs") || (listbox != "prevnext")) 

Это не удается даже тогда, когда ListBox является «л.ш.» или «ПредыдущаяСледующая» строка.

Пробовал даже ниже синтаксиса, но его неспособность

if ((listbox != "lhs" || listbox != "prevnext")) 

Не уверен, правильный синтаксис для указанных выше условий.

+5

Оба синтаксиса верны. Возможна логическая ошибка. –

+0

Он должен потерпеть неудачу, если listbox равен lhs или prevnex, он будет запускаться только тогда, когда это что-то еще. –

+1

вы должны просто использовать == вместо! =, И он будет работать. –

ответ

0

Попробуйте

if (!(listbox == 'lhs' || listbox == 'prevnext')) { 

или

if (listbox != 'lhs' || listbox != 'prevnext') { 
+2

второй - тот же, что и исходный вопрос? первый правый –

+0

@ Light ... Да, второй не работает, но спасибо за первый, он работает. – KrankyCode

+0

@KrankyCode: для дальнейшего использования это называется теоремой ДеМоргана, которая гласит, что '! (A || B)' совпадает с '! A &&! B' и'! (A && B) 'одинаково как '! A || ! B'. Поэтому вы хотите использовать '! A &&! B' вместо'! A || ! B'. Этот бит булевой алгебры используется в цифровой конструкции электроники для упрощения схем или преобразования между логическим высоким и логическим низкими цепями. Но это происходит так часто в программировании, что программисты также должны это изучить. – slebetman

6
if ((listbox != "lhs") || (listbox != "prevnext")) 

Это утверждение всегда будет верным - потому что ListBox никогда не будет равно оба значения

жаль, что я, возможно, смущало некоторых людей, не отправляя ответ ... @Light имеет в решение (первый фрагмент кода, второй фрагмент явно идентичен вопросу без внутренних скобок)

некоторые люди просто нужно что Facepalm момент, чтобы понять ответ сами

Я бы использовать

if ((listbox != "lhs") && (listbox != "prevnext")) 

если ListBox = "Фред" ...

if (("fred" != "lhs") && ("fred" != "prevnext")) 
      true  &&  true    result = true 

если ListBox = "л.ш." ...

if (("lhs" != "lhs") && ("lhs" != "prevnext")) 
      false  &&  true    result = false 

если ListBox = "ПредыдущаяСледующий" ...

if (("lhs" != "lhs") && ("lhs" != "prevnext")) 
      true  &&  false    result = false 

смотрит прямо на меня

+0

Нет, @ Яроманда Х прав. –

+0

Я не уверен, что такое волатильность с этим ответом - это не так. –

+0

@Jaromanda ... Это не работает для моего требования, поскольку я не хочу, чтобы код выполнялся в обоих условиях, то есть, если listbox == "lhs" OR listbox == "prevnext" ... поэтому "&&" не будет работать – KrankyCode

0
(listbox != "lhs" || listbox != "prevnext") 

Всегда верны - listbox не может быть как lhs и prevnext в то же время, так что всегда НЕ по крайней мере, один из этих значений ,

(listbox == "lhs" || listbox == "prevnext") 

затем:

listbox = 'lhs' // => true 
listbox = 'prevnext' // => true 
listbox = 'anything_else' // => false 

listbox Правда, если это lhs или prevnext.

(listbox != "lhs" && listbox != "prevnext") 

затем:

listbox = 'lhs' // => false 
listbox = 'prevnext' // => false 
listbox = 'anything_else' // => true 

listbox Правда, если ни 'л.ш.', ни 'ПредыдущаяСледующая.

(listbox == "lhs" && listbox == "prevnext") 

Для полноты - всегда false - список не может быть равен двум значениям одновременно.

Смежные вопросы