Domanda

Se ho un blocco di istruzioni come questo:

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

o in questo modo:

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

Qual è la differenza?

Sembra che con if / else, if parte sia per il vero stato e la parte else sia per tutte le altre opzioni possibili (false). Un altro if sarebbe utile per una serie di condizioni. Questa è la mia comprensione, c'è qualcos'altro di cui dovrei essere a conoscenza?

È stato utile?

Soluzione

Situazione a:

if( condition )
{
}
else
{
}

Quando la condizione nell'istruzione precedente è falsa, le istruzioni nel blocco else verranno sempre eseguite.

Situazione b:

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

Quando 'condizione' è falsa, le istruzioni nell'altro blocco if verranno eseguite solo quando condizione2 è vera. Le istruzioni nel blocco else verranno eseguite quando condition2 è falso.

Altri suggerimenti

Senza " elseif " sintassi dovresti scrivere istruzioni if ??a catena per elaborare uno dei numerosi risultati possibili in questo modo:

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

invece puoi scrivere

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

che è completamente uguale al precedente, ma sembra molto più bello ed è molto più facile da leggere.

Molte lingue hanno una grammatica come questa (qui: Specifica lingua ECMAScript , quindi JavaScript):

  

IfStatement :
  & nbsp; & nbsp; & nbsp; & nbsp; if ( Expression ) Dichiarazione else Dichiarazione
  & nbsp; & nbsp; & nbsp; & nbsp; if ( Expression ) dichiarazione

     

Dichiarazione :
  & Nbsp; & nbsp; & nbsp; & nbsp; Blocca
  & Nbsp; & nbsp; & nbsp; & nbsp; VariableStatement
  & Nbsp; & nbsp; & nbsp; & nbsp; EmptyStatement
  & Nbsp; & nbsp; & nbsp; & nbsp; ExpressionStatement
  & Nbsp; & nbsp; & nbsp; & nbsp; IfStatement
  & Nbsp; & nbsp; & nbsp; & nbsp; IterationStatement
  & Nbsp; & nbsp; & nbsp; & nbsp; ContinueStatement
  & Nbsp; & nbsp; & nbsp; & nbsp; BreakStatement
  & Nbsp; & nbsp; & nbsp; & nbsp; ReturnStatement
  & Nbsp; & nbsp; & nbsp; & nbsp; WithStatement
  & Nbsp; & nbsp; & nbsp; & nbsp; LabelledStatement
  & Nbsp; & nbsp; & nbsp; & nbsp; SwitchStatement
  & Nbsp; & nbsp; & nbsp; & nbsp; ThrowStatement
  & Nbsp; & nbsp; & nbsp; & nbsp; TryStatement

     

Blocco :
  & nbsp; & nbsp; & nbsp; & nbsp; { StatementList opt }

     

Elenco istruzioni :
  & Nbsp; & nbsp; & nbsp; & nbsp; Dichiarazione
  & nbsp; & nbsp; & nbsp; & nbsp; Elenco istruzioni Dichiarazione

Quindi i rami di un ifStatement possono contenere un blocco di istruzioni ( Blocco ) o una delle altre istruzioni (diversa da Blocco ) . Ciò significa che questo è valido:

if (expr)
    someStatement;
else
    otherStatement;

E poiché StatementList può contenere solo una singola istruzione, questi esempi sono equivalenti al precedente:

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

if (expr)
    someStatement;
else {
    otherStatement;
}

if (expr) {
    someStatement;
} else
    otherStatement;

E quando sostituiamo otherStatement con un IfStatement aggiuntivo, otteniamo questo:

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

Il resto è solo la formattazione del codice:

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

Sottolineando ciò che ha detto Gumbo.

Inoltre, se una lingua ha un vero elif / elsif / elseif (diciamo, un'istruzione " real & else; else-if, invece di una sorta di concatenamento annidato nascosto dalla formattazione), il compilatore può facilmente emettere un singolo nodo in un albero di sintassi astratto (o simile, vedi http://it.wikipedia.org/wiki/Abstract_syntax_tree ) invece di nidificarli.

Per fare un esempio:

Di 'in C / C ++ che hai:

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

Quindi il compilatore costruirà un nodo AST come questo:

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

Ma se la lingua scelta ha un vero if-else:

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

Quindi l'AST potrebbe apparire più facilmente così:

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

In una lingua del genere, un " if else " sarebbe possibile solo se le parentesi graffe non sono obbligatorie:

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

AST corrispondente ( se le parentesi graffe non sono obbligatorie ):

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

Questo potrebbe rendere l'analisi CFG ( http://en.wikipedia.org/wiki/Control_flow_graph ) più facile da implementare (anche se potrebbe non esserci un reale vantaggio in termini di ottimizzazione; quindi, sarebbe solo un vantaggio per il programmatore pigro: D).

else if significa sostanzialmente la parte else di if è un'altra istruzione 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 se utilizzato anche in questo modo

Data una singola variabile, utilizzerai la semplice struttura if-else . Quando ci sono più variabili e hai un percorso diverso da eseguire per le diverse possibilità, utilizzerai if-else if -...- else . Nota che quest'ultimo termina anche con un'istruzione else .

Hai già dato tu stesso la risposta. if / else è per il risultato vero / falso, come è un int = 2 o qualsiasi altro valore int possibile, e se / elseif è per più di 2 risultati, come un int = 2, int = 3 e così via.

Inoltre raggruppa il contesto di una variabile. Puoi controllare ogni singolo risultato come

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

Con if / else / elseif è meglio leggibile.

se vuoi controllare più condizioni possiamo usare if..elseif. unica condizione quindi possiamo usare if or if ... else.

Qui non riesco a caricare la spiegazione completa con l'esempio, quindi per favore vai attraverso i seguenti link.

dettagli dell'istruzione if..else
http://allinworld99.blogspot.in/2016 /02/ifelse-flow-chart-with-easy-example.html
if ... elseif dettagli
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);
        }
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top