2013-12-05 3 views
2

Для назначения в классе нам поручено получить пользовательский ввод с помощью подсказки(). Я хочу, чтобы приглашение принимало только 1 из 3 значений.Простой Javascript "или" утверждение?

Вот мой код:

ounce = prompt ("What size would you like your drink?\n8oz, 12oz, 16oz are the available sizes."); 

    while (ounce!= "8oz" || ounce != "12oz" || ounce != "16oz") 
{ 
     alert ("Please select a proper size: 8oz, 12oz, 16oz"); 
     prompt ("What size would you like your drink?\n8oz, 12oz, 16oz are the available sizes."); 
} 

Мое намерение состоит в том, что, когда пользователь вводит что-нибудь еще, кроме 8oz, 12oz, или 16oz он скажет им, что размер не доступен, и их побудить их просить их до тех пор, пока они не войдут в одно из этих значений. Однако мой код в его нынешнем виде не работает. Даже если я вхожу в 8 унций, он говорит, что это неправильно и снова спрашивает меня о моем размере. Я начинаю на начинающем уровне, так как вы можете сказать, что любая помощь приветствуется.

+1

|| означает, что это правда, если оно удовлетворяет ЛЮБОЙ из этих условий. Он не может равняться всем трем сразу, верно? – JAL

+0

Попробуйте '&&' вместо '||'. Кроме того, вы не перезагружаете переменную 'ounce' при втором вызове' prompt'. – Rafa

ответ

2

Необходимо использовать условие И ... вам нужно ввести цикл, только если введенное значение не является одним из трех, если вы используете OR, даже если вы введете допустимое значение, то два из операции сравнения будут окажутся правдивыми ... например, если вы введете 8oz, то и ounce != "12oz", и ounce != "16oz" будут истинными .. так как операция OR вернет true для любого из условий, получится true, она войдет в цикл.

Если вы используете AND условие, то цикл будет выполняться только при соблюдении всех трех условий, так что если вы вводите действительное значение как 12oz то условие ounce != "12oz" вернет ложное в результате общее состояние потерпеть неудачу, таким образом, выходящий из петля.

ounce = prompt ("What size would you like your drink?\n8oz, 12oz, 16oz are the available sizes."); 

while (ounce!= "8oz" && ounce != "12oz" && ounce != "16oz") 
{ 
     alert ("Please select a proper size: 8oz, 12oz, 16oz"); 
     ounce = prompt ("What size would you like your drink?\n8oz, 12oz, 16oz are the available sizes."); 
} 

Демо: Fiddle

+0

Вам также нужно установить «унция» во втором приглашении. – Brad

+0

@Brad спасибо ... –

+0

Не могли бы вы объяснить логику использования AND? Я читал это как: «В то время как унция не равна 8 унций, а унция не равна 12 унций, а унция не равна 16 унции» Это работает, но если унция равна 8 унций, то как же тогда она может быть равна 12 унции и 16 унций , – user3068364

0

Простой ответ заключается в использовании и вместо OR, но я думаю, что это стоит того, чтобы объяснить, почему это так.

Что вы видите здесь является применение De Morgan's theorem, которая гласит:

!(A && B) === !A || !B 

!(A || B) === !A && !B 

Итак, если вы:

ounce!= "8oz" || ounce != "12oz" || ounce != "16oz" 

, что вы говорите:

! (ounce == "8oz" && ounce == "12oz" && ounce == "16oz") 

, который никогда не является истинным, потому что ounce не может быть «8oz» и «12oz» и «16oz» все на th в то же время.

То, что я верю, что вы хотите вместо этого:

! (ounce == "8oz" || ounce == "12oz" || ounce == "16oz") 

, который, когда мы применяем преобразование Де Моргана получим:

ounce != "8oz" && ounce != "12oz" && ounce != "16oz" 
0

Как примечание стороны, это идеальная ситуация для DO- в то время как.

var ounce = undefined; 

do { 
    alert("Please select a proper size: 8oz, 12oz, 16oz"); 
    ounce = prompt("What size would you like your drink?\n8oz, 12oz, 16oz are the available sizes."); 
} while (ounce != "8oz" && ounce != "12oz" && ounce != "16oz"); 
Смежные вопросы