if/else и if/elseif
-
10-07-2019 - |
Вопрос
Если у меня есть блок инструкций, подобный этому:
if (/*condition here*/){ }
else{ }
или вот так:
if (/*condition here*/)
else if (/*condition here*/) {}
else if (/*condition here*/) {}
В чем же разница?
Похоже, что с if / else часть if предназначена для состояния true, а часть else - для всех других возможных вариантов (false).Параметр else-if был бы полезен для ряда условий.Насколько я понимаю, есть ли еще что-то, о чем я должен знать?
Решение
Ситуация a:
if( condition )
{
}
else
{
}
Если условие в приведенном выше операторе ложно, то операторы в блоке else всегда будут выполняться.
Ситуация b:
if( condition )
{
}
else if( condition2 )
{
}
else
{
}
Когда «условие» ложно, тогда операторы в блоке else if будут выполняться только тогда, когда условие 2 истинно. Операторы в блоке else будут выполняться, когда условие2 ложно.
Другие советы
Без "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
}
, который полностью совпадает с предыдущим, но выглядит намного лучше и его легче читать.
Во многих языках есть грамматика, подобная этой (здесь: Спецификация языка ECMAScript, итак , JavaScript):
Утверждение if :
if (
Выражение)
Заявлениеelse
Заявление
if (
Выражение)
ЗаявлениеЗаявление :
Блок
Переменная оценка
Пустое утверждение
Экспрессионистское утверждение
Утверждение if
Итерационное утверждение
Постоянное утверждение
Прорывное заявление
Возвращаемое утверждение
С оговоркой
Обозначенное утверждение
Утверждение о переключении
Выбрасываемое утверждение
СвиданиеБлок :
{
Список утвержденийвыбрать}
Список утверждений :
Заявление
Список утверждений Заявление
Таким образом , ветви Утверждение if может содержать блок утверждений (Блок) или одно из других утверждений (кроме Блок).Это означает, что это действительно так:
if (expr)
someStatement;
else
otherStatement;
И как Список утверждений может содержать только одно утверждение, эти примеры эквивалентны предыдущим:
if (expr) {
someStatement;
} else {
otherStatement;
}
if (expr)
someStatement;
else {
otherStatement;
}
if (expr) {
someStatement;
} else
otherStatement;
И когда мы заменим otherStatement
дополнительным Утверждение if, мы получаем это:
if (expr) {
someStatement;
} else
if (expr) {
someOtherStatement;
}
Остальное - это просто форматирование кода:
if (expr) {
someStatement;
} else if (expr) {
someOtherStatement;
}
Подчеркивая сказанное Гамбо.
Кроме того, если у языка есть реальная команда 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).
else if
в основном означает else
часть if
- это еще один оператор 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 и if / else, если используется, тоже так
Учитывая одну переменную, вы будете использовать простую структуру if-else
. Когда имеется несколько переменных и у вас есть другой путь для выполнения для разных возможностей, вы будете использовать if-else if -...- else
. Обратите внимание, что последний также заканчивается оператором else
.
Вы уже дали ответ сами. 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 это лучше читается.
если вы хотите проверить больше условий, мы можем использовать if..elseif. одно условие, то мы можем использовать, если или если ... еще.
Здесь я не могу загрузить полное объяснение с примером, поэтому перейдите по следующим ссылкам.
if..else подробности заявления
http://allinworld99.blogspot.in/2016 /02/ifelse-flow-chart-with-easy-example.html
if ... elseif details
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);
}
}
}