если / еще и если / еще - PullRequest
6 голосов
/ 12 марта 2009

Если у меня есть блок операторов, подобный этому:

if (/*condition here*/){ }
else{ }

или как это:

if (/*condition here*/)
else if (/*condition here*/) {}
else if (/*condition here*/) {}

В чем разница?

Кажется, что с if / else, если part для истинного состояния, а else для всех других возможных опций (false). В противном случае было бы полезно для ряда условий. Это мое понимание, есть ли еще что-то, о чем я должен знать?

Ответы [ 10 ]

21 голосов
/ 12 марта 2009

Без синтаксиса "elseif" вы должны были бы написать цепочку if-операторов для обработки одного из нескольких возможных результатов следующим образом:

if( str == "string1" ) {
   //handle first case
} else {
    if( str == "string2" ) {
       //handle second case
    } else {
       if( str == "string3" ) {
           //handle third case
       } else {
          //default case
       }
    }
 }

вместо этого вы можете написать

if( str == "string1" ) {
   //handle first case
} else if( str == "string2" ) {
   //handle second case
} else if( str == "string3" ) {
   //handle third case
} else {
   //default case
}

, который полностью совпадает с предыдущим, но выглядит намного приятнее и его легче читать.

14 голосов
/ 12 марта 2009

Ситуация:

if( condition )
{
}
else
{
}

Если условие в приведенном выше операторе ложно, то операторы в блоке else всегда будут выполняться.

Ситуация b:

if( condition )
{
}
else if( condition2 )
{
}
else
{
}

Когда 'условие' ложно, то операторы в блоке else if будут выполняться только тогда, когда условие 2 истинно. Операторы в блоке else будут выполняться, когда условие2 ложно.

3 голосов
/ 13 марта 2009

Подчеркивая сказанное Гамбо.

Кроме того, если в языке есть реальная команда elif / elsif / elseif (скажем, «настоящая» инструкция else-if, а не какая-то вложенная цепочка, скрытая путем форматирования), то компилятор может легко создать один узел в абстрактном синтаксическом дереве (или аналогичном, см. http://en.wikipedia.org/wiki/Abstract_syntax_tree) вместо их вложения.

Чтобы привести пример:

Скажем, в C / C ++ у вас есть:

if (a) {
    X
} else if (b) {
    Y
} else if (c) {
    Z
} else {
    0
}

Затем компилятор создаст AST-узел следующим образом:

   a
  / \
 X   b
    / \
   Y   c
      / \
     Z   0

Но если у языка выбора есть реальное if-else:

if (a) {
    X
} elif (b) {
    Y
} elif (c) {
    Z
} else {
    0
}

Тогда AST могло бы выглядеть так:

   (a--b--c)
   /  /  /  \
  X  Y  Z    0

На таком языке «если еще» будет возможно только в том случае, если фигурные скобки не являются обязательными:

if (a) {
    X
} elif (b) {
    Y
} else if (c) {  // syntax error "missing braces" if braces mandatory
    Z
} else {
    0
}

Соответствующий AST (, если скобки не обязательны ):

   (a--b)
   /  /  \
  X  Y    c
         / \
        Z   0

Это может сделать анализ CFG (http://en.wikipedia.org/wiki/Control_flow_graph) более легким для реализации (хотя в действительности не может быть никакой выгоды от оптимизации; так что, imho, это только выиграет для ленивого программиста: D).

3 голосов
/ 12 марта 2009

Многие языки имеют такой грамматик (здесь: Спецификация языка ECMAScript , поэтому JavaScript):

IfStatement :
if ( Выражение ) Выписка else Выписка
if ( Выражение ) Выписка

Заявление :
Блок
ВыраженияПрисваивания
EmptyStatement
ExpressionStatement
IfStatement
ИнструкцияИтерации
ContinueStatement
BreakStatement
ReturnStatement
нетерминал
ИнструкцииСМетка
SwitchStatement
ThrowStatement
нетерминал ИнструкцияTry

Блок :
{ StatementList opt }

StatementList :
Заявление
StatementList Выписка

Таким образом, ветви ifStatement могут содержать блок операторов ( Block ) или один из других операторов (кроме Block ). Это означает, что это действительно:

if (expr)
    someStatement;
else
    otherStatement;

И поскольку StatementList может содержать только одно утверждение, эти примеры эквивалентны предыдущему:

if (expr) {
    someStatement;
} else {
    otherStatement;
}

if (expr)
    someStatement;
else {
    otherStatement;
}

if (expr) {
    someStatement;
} else
    otherStatement;

И когда мы заменим otherStatement дополнительным IfStatement , мы получим это:

if (expr) {
    someStatement;
} else
    if (expr) {
        someOtherStatement;
    }

Остальное только форматирование кода:

if (expr) {
    someStatement;
} else if (expr) {
    someOtherStatement;
}
2 голосов
/ 05 апреля 2019
**if/else**
if(condition)
  statement;
else
   statement;

if / else if / else

if(condition)
 {
   if(condition)
      statement;
   else 
     statement;
  }   
else if(condition)
{
    if(condition)
     statement;
    else
     statement;
}
else
    statement;

if / else и if / else, если используется, также как это

2 голосов
/ 12 марта 2009

else if в основном означает, что else часть if является другим оператором if.

0 голосов
/ 01 апреля 2017
import java.util.*;

public class JavaApplication21 {
    public static void main(String[] args) {

        Scanner obj = new Scanner(System.in);
        System.out.println("You are watching an example of if & else if statements");

        int choice, a, b, c, d;
        System.out.println(" Enter 1-Addition & 2-Substraction");

        int option = obj.nextInt();
        switch (option) {
            case (1):
                System.out.println("how many numbers you want to add.... it can add up to 3 numbers only");
                choice = obj.nextInt();
                if (choice == 2) {
                    System.out.println("Enter 1st number");
                    a = obj.nextInt();

                    System.out.println("Enter 2nd number");
                    b = obj.nextInt();

                    c = a + b;

                    System.out.println("Answer of adding " + a + " & " + b + " is= " + c);
                } else if (choice == 3) {
                    System.out.println("Enter 1st number");
                    a = obj.nextInt();

                    System.out.println("Enter 2nd number");
                    b = obj.nextInt();

                    System.out.println("Enter 3rd number");
                    c = obj.nextInt();

                    d = a + b + c;

                    System.out.println("Answer of adding " + a + " , " + b + " & " + c + "  is= " + d);
                }
            case (2):
                System.out.println("how many numbers you want to substract.... it can substract up to 3 numbers only");
                choice = obj.nextInt();
                if (choice == 2) {
                    System.out.println("Enter 1st number");
                    a = obj.nextInt();

                    System.out.println("Enter 2nd number");
                    b = obj.nextInt();

                    c = a - b;
                    System.out.println("Answer of substracting " + a + " & " + b + " is= " + c);
                } else if (choice == 3) {
                    System.out.println("Enter 1st number");
                    a = obj.nextInt();

                    System.out.println("Enter 2nd number");
                    b = obj.nextInt();

                    System.out.println("Enter 3rd number");
                    c = obj.nextInt();

                    d = a - b - c;
                    System.out.println("Answer of substracting " + a + " , " + b + " & " + c + "  is= " + d);
                }
            default:
                System.out.println("no option you have chosen" + option);
        }
    }
}
0 голосов
/ 22 февраля 2016

если вы хотите проверить больше условий, мы можем использовать if..elseif. одно условие, то мы можем использовать, если или если ... еще.

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

if..else детали отчета
http://allinworld99.blogspot.in/2016/02/ifelse-flow-chart-with-easy-example.html
если ... еще детали
http://allinworld99.blogspot.in/2016/02/flow-chart-with-example-for-if-then.html

0 голосов
/ 12 марта 2009

Вы уже дали ответ сами. if / else для результата true / false, like - это int = 2 или любое другое возможное значение int, а if / elseif - для более чем 2 результатов, например, int = 2, int = 3 и т. д.

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

if (a == 2) { do one thing };
if (a == 3) { do another thing };
...
if (a != 2 && a != 3 ...) { do something else };

С if / else / elseif лучше читается.

0 голосов
/ 12 марта 2009

Учитывая одну переменную, вы будете использовать простую структуру if-else. Если имеется несколько переменных и у вас есть другой путь для выполнения для разных возможностей, вы будете использовать if-else if-...-else. Обратите внимание, что последний также заканчивается оператором else.

...