2016-04-06 3 views
0

Я пытаюсь получить голову вокруг do/while петли и логические операторы в js. Моя проблема заключается в том, чтобы встраивать оператор if/else if/else в раздел do, поскольку он продолжает циклировать предупреждения. Кроме того, если я нахожу что-то другое, кроме редкого, среднего или хорошо сделанного, оно переходит в оператор else if, а не в оператор else, даже если я указал средний или хорошо сделанный для инструкции else if. Где я иду не так? Любая помощь будет оценена по достоинству.if elseif инструкция в do/while заявление бесконечный цикл javascript

Спасибо.

var food; 
var steak; 

food = prompt("Hey what type of food do you want to eat? We have steak,     chicken, legumes, kangaroo or pufferfish?","Select your choice here.").toUpperCase(); 

switch (food) { 
    case 'STEAK': 
     alert ("Sure no problem, how would you like your steak done?"); 
     steak = prompt("Would you like your steak done rare, medium or well-done?").toUpperCase(); 
      do { 
       if (steak === "RARE") { 
        alert ("You eat the rare steak"); 
       } 
       else if (steak === "MEDIUM"||"WELL-DONE") { 
        alert("You eat your steak and it's good."); 
       } 
       else { 
        alert("Sorry didn't catch that."); 
        steak = prompt("Choose rare, medium or well-done."); 
       } 
      } while (steak !== "RARE" || "MEDIUM" || "WELL-DONE"); 
     break; 
} 
+3

Синтаксис как 'if (steak ===" MEDIUM "||" WELL-DONE ")' не летает в JavaScript. Вы должны делать каждое сравнение отдельно. Например. 'if (steak ===" MEDIUM "steak ===" WELL-DONE ")' – j08691

+0

@ j08691 уже указал, как вам нужно делать сравнения. Причина бесконечного цикла заключается в том, что '' любая строка '' является правдой, т.е. сравнение такое же, как 'while (steak! ==" RARE "|| true || true), что всегда верно. – vesse

ответ

0

Это происходит в бесконечном цикле из-за условия, которое вы имеете в конструкции «while», всегда приравнивается к «true».

Что у вас есть выглядит следующим образом:

while (steak !== "RARE" || "MEDIUM" || "WELL-DONE") 

Изменить его

while (steak !== "RARE" && steak !== "MEDIUM" && steak !== "WELL-DONE") 

Кроме того, у вас есть аналогичные проблемы в одной из «еще, если» заявления.

else if (steak === "MEDIUM"||"WELL-DONE") { 

Изменить его

else if (steak === "MEDIUM"|| steak === "WELL-DONE") { 

Есть еще несколько логических проблем в вашем сценарии. Вместо этого попробуйте следующее:

var food; 
var steak; 

food = prompt("Hey what type of food do you want to eat? We have steak,     chicken, legumes, kangaroo or pufferfish?","Select your choice here.").toUpperCase(); 

switch (food) { 
case 'STEAK': 
    alert ("Sure no problem, how would you like your steak done?"); 

    steak = prompt("Would you like your steak done rare, medium or well-done?").toUpperCase(); 
    while (steak !== "RARE" && steak !== "MEDIUM" && steak !== "WELL-DONE") { 
     alert("Sorry didn't catch that."); 
     steak = prompt("Choose rare, medium or well-done.").toUpperCase(); 
    } 

    if (steak === "RARE") { 
     alert ("You eat the rare steak"); 
    } 
    else if (steak === "MEDIUM"|| steak === "WELL-DONE") { 
     alert("You eat your steak and it's good."); 
    }    
    break; 
} 

Сообщите мне, если он по-прежнему не работает.

0

Вы должны делать каждый сравнение по отдельности, так

else if (steak === "MEDIUM"||"WELL-DONE") { 
    alert("You eat your steak and it's good."); 
} 

должен быть

else if (steak === "MEDIUM"|| steak === "WELL-DONE") { 
    alert("You eat your steak and it's good."); 
} 

и так далее. Это также является причиной вашего бесконечного цикла do/while.

0

Как отмечалось выше, условия должны быть отдельно испытаны
т.е. если (а == п || A == м)

Также ваше последнее утверждение не верно. Вы можете захотеть сделать что-то вроде

var food; 
 
var steak; 
 

 
food = prompt("Hey what type of food do you want to eat? We have steak,     chicken, legumes, kangaroo or pufferfish?","Select your choice here.").toUpperCase(); 
 

 
switch (food) { 
 
    case 'STEAK': 
 
     alert ("Sure no problem, how would you like your steak done?"); 
 
     steak = prompt("Would you like your steak done rare, medium or well-done?").toUpperCase(); 
 
     console.log('steak', steak); 
 
      do { 
 
       console.log('steak inside do', steak); 
 
       if (steak === "RARE") { 
 
        alert ("You eat the rare steak"); 
 
       } 
 
       else if (steak === "MEDIUM"|| steak ==="WELL-DONE") { 
 
        alert("You eat your steak and it's good."); 
 
       } 
 
       else { 
 
        alert("Sorry didn't catch that."); 
 
        steak = prompt("Choose rare, medium or well-done.").toUpperCase(); 
 
       } 
 
      } while (steak !== "RARE" && steak !== "MEDIUM" && steak !== "WELL-DONE"); 
 
     break; 
 
}

работал для меня.

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