Pergunta

Se eu tiver um bloco de declaração como esta:

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

ou menos assim:

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

Qual é a diferença?

Parece que com if / else, se parte é para o estado verdadeiro e a parte mais é para todas as outras opções possíveis (false). Uma outra coisa, se seria útil para uma série de condições. Este é o meu entendimento, há algo mais que eu deveria estar ciente de?

Foi útil?

Solução

Situação um:

if( condition )
{
}
else
{
}

Quando a condição na declaração acima é falsa, então as declarações no bloco else será sempre executada.

Situação b:

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

Quando 'condição' é falsa, então as declarações no bloco else if somente será executado quando condition2 é verdade. As declarações no bloco else será executado quando condition2 é falsa.

Outras dicas

Sem "elseif" sintaxe que você teria de cadeia escrita se-indicações para o processamento de um dos vários resultados possíveis desta maneira:

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

Em vez disso você pode escrever

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

que é completamente a mesma que a anterior, mas parece muito mais agradável e é muito mais fácil de ler.

Muitas línguas têm uma gramática assim (aqui: ECMAScript Language Specification , assim JavaScript):

IfStatement :
if ( Expression ) Declaração else Declaração
if ( Expression ) Declaração

Declaração :
Bloquear
VariableStatement
EmptyStatement
ExpressionStatement
IfStatement
IterationStatement
ContinueStatement
BreakStatement
ReturnStatement
WithStatement
LabelledStatement
SwitchStatement
ThrowStatement
TryStatement

Bloquear :
{ StatementList opt }

StatementList :
Declaração
StatementList Declaração

Assim, os ramos de uma ifStatement pode conter um bloco de instruções ( Bloquear ) ou uma das outras declarações (excepto Bloquear ) . Isso significa que este é válido:

if (expr)
    someStatement;
else
    otherStatement;

E, como StatementList pode apenas conter uma única instrução, estes exemplos são equivalentes ao anterior:

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

if (expr)
    someStatement;
else {
    otherStatement;
}

if (expr) {
    someStatement;
} else
    otherStatement;

E quando substituímos otherStatement por um adicional de IfStatement , temos o seguinte:

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

O resto é apenas formatação de código:

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

Enfatizando o Gumbo disse.

Além disso, se uma língua tem uma verdadeira elif / ELSIF / elseif (digamos, um "real" instrução elseif, em vez de um tipo de encadeamento aninhada escondido formatando), então o compilador pode easly emitem um único nó em uma árvore Abstract Syntax (ou similar, veja http://en.wikipedia.org/wiki/Abstract_syntax_tree ) em vez de nidificação eles.

Para dar um exemplo:

Say em C / C ++ você tem:

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

Em seguida, o compilador irá construir um AST-node como esta:

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

Mas, se a linguagem de escolha tem uma verdadeira if-else:

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

Em seguida, a AST poderia mais facilmente ter esta aparência:

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

Em tal linguagem um, um "se outra coisa" só seria possível se as cintas não são obrigatórios:

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

Correspondente AST ( se chaves não são obrigatórios ):

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

Isso poderia fazer CFG-Analysis ( http://en.wikipedia.org/wiki/Control_flow_graph ) mais fácil de implementar (embora possa haver nenhum benefício real otimização, assim imho ele tinha acabado de beneficiar o programador preguiçoso:. D)

else if significa basicamente a parte else de if é outra declaração if.

**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 e if / else if usado também como este

Dada uma única variável, você vai usar a estrutura if-else simples. Quando existem várias variáveis ??e você tem um caminho diferente para executar para as diferentes possibilidades, você usará if-else if-...-else. Note, que as extremidades também último com uma declaração else.

Você já deu a resposta sozinho. if / else é para o resultado verdadeiro / falso, como é um qualquer outro valor int possível int = 2 ou e if / elseif for para mais de 2 resultados, como um int = 2, e int = 3 e assim por diante.

Também grupos no contexto de uma variável. Você pode verificar cada resultado único como

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

Com if / else / elseif é melhor legível.

Se você quiser conferir mais condição podemos usar if..elseif. condição única, então podemos usar se ou se ... else.
Aqui eu não posso capaz de carregar a explicação completa com exemplo para siga os seguintes links.
if..else detalhes declaração
http://allinworld99.blogspot.in/2016 /02/ifelse-flow-chart-with-easy-example.html
se ... detalhes elseif
http://allinworld99.blogspot.in /2016/02/flow-chart-with-example-for-if-then.html

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);
        }
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top