2016-04-12 3 views
-1

Я получаю вложенные петли if (то же самое, что и с использованием оператора & &), но как этот код здесь знает, какие условия выполнять без каких-либо условий и только назад к спине? Один из них находится внутри вложенных операторов if. Я могу сказать, что это очевидно, почему это работает так, как это происходит, я просто не понимаю. Кроме того, я знаю, как записать это в несколько более читаемых способов тестирования нескольких условий. Пожалуйста, просто объясните, что здесь происходит с этим кодом. Как он знает, чтобы вывести «Ты слишком стар» или «Ты слишком молод?»инструкция else в вложенных операторах if. Как этот код знает, какой оператор else выполнить?

var age = prompt("Please enter Your age here :"); 
var min_age=18; 
var max_age=40; 

if(age>=min_age){ 
if(age<=max_age){ 
    console.log("You meet the requirements for this competition"); 
}else{ 
    console.log("You are too old"); 
} 
}else{ 
console.log("You are too young"); 
} 
+3

* Как этот код знаю, какой еще оператор для выполнения * Фигурные скобки?. –

+0

Если возраст больше или равен min_age> (если возраст меньше или равен max_age> Вы отвечаете требованиям; else> Вы слишком стары) else> Вы слишком молоды. Просто прочитайте код. –

+0

Другими словами: сначала выполняется обертка 'if else'. Если возраст _under_ 18, он просто выполнит 'else' и скажет, что вы слишком молоды. В противном случае он перейдет к следующему 'if else' и забудет о предыдущем. Если возраст будет _under_ 40, он скажет, что вы отвечаете требованиям и больше ничего не делаете. В противном случае он выполнит 'else', привязанный к текущему' if', и скажет, что вы слишком стары. Но на самом деле вы должны позволить всем участвовать. Никакой дискриминации. – blex

ответ

0

Неопределенность if-then-else известна в течение длительного времени. Все языки решили это, указав, что else будет соответствовать первому, предшествующему if.Итак:

if (a) 
    if (b) 
     x = 1; 
else 
    x = 2; 

решает:

if (a) { 
    if (b) { 
     x = 1; 
    } 
    else { 
     x = 2; 
    } 
} 

EDIT по reuest Nisar в:

определен if заявление как:

if (<condition>) <statement> [else <statement>] 

Это означает, что <statement> в вышеупомянутое может также быть if заявление. Так, например:

if (<condition>) if (<condition>) [else <statement>] [else <statement>] 

Поскольку каждая else часть является необязательной, компилятор не имеет возможности узнать, когда он видит else часть, к которой она принадлежит if. Чтобы решить эту проблему, язык определяет, что else всегда соответствует первому предшествовавшему if.

+0

Открытый ответ. Спасибо. – dannymac

+0

@nisar: см. Дополнение к ответу. Это вам поможет? –

0

Во-первых, давайте отступа код.

var age = prompt("Please enter Your age here :"); 
var min_age = 18; 
var max_age = 40; 

if (age >= min_age) 
{ 
    if (age <= max_age) 
    { 
     console.log("You meet the requirements for this competition"); 
    } 
    else 
    { 
     console.log("You are too old"); 
    } 
} 
else 
{ 
    console.log("You are too young"); 
} 

Начинаясь ..

var age = prompt("Please enter Your age here :"); 

Допустим, вы вводите в окне запроса, так age=21

Инициализируем

var min_age = 18; 
var max_age = 40; 

Теперь давайте посмотрим на первое условие if.

if (age >= min_age) 

Если подставить значения, это приводит к

if (21 >= 18) 

Это верно, поэтому мы идем внутрь, если блок, а не в другом месте. Следующая линия.

if (age <= max_age) 

Это приводит к

if (21 <= 40) 

Учитывая, что это также верно, мы печатаем Вы отвечают требованиям этого соревнования.

Важнейшим выводом от этого является отступ вашего кода, а остальное становится довольно простым.

+1

Да, это была копия, прикрепленная к другому учебнику. Я бы не писал ничего подобного. Благодарю. – dannymac

0

Скобы {} установить предел.

Попытайтесь думать в псевдокоде, посмотрите за персонажей и подумайте о том, что происходит.

Чтение в порядке:

If you are old enough 
    If your are not too old 
    'You meet the requirements for this competition' 
    OTHERWISE 
    'You are too old' 
    END 
OTHERWISE 
    'You are too young' 
END 

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

+0

Да, только что не видел, чтобы это было написано раньше, меня отбрасывало. Должен был сделать псевдоподход. Благодарю. – dannymac

0

Есть только 3 Параметры

  • слишком молодой
  • правильный возраст
  • слишком стар

Первый чек - это человек достаточно стар?

if(age>=min_age) 

Вторая проверка - это слишком старый человек?

if(age<=max_age) 

единственно возможный вариант остается после этого, если Постулаты является FALSE:

  • слишком стар