Являются ли несколько операторов «если» и операторов «если-иначе-если» одинаковыми для взаимоисключающих условий?

Есть ли разница между написанием нескольких операторов if и операторов if-else-if?

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

Условия были взаимоисключающими.


person arnav bhartiya    schedule 29.04.2015    source источник
comment
Если условия не являются взаимоисключающими, тогда да, это имеет значение.   -  person dcastro    schedule 29.04.2015
comment
когда я попытался написать программу с несколькими операторами if, это не дало ожидаемых результатов. А вот с "if else-if" это сработало. Я думаю, вы только что сами ответили на свой вопрос...   -  person Alexis C.    schedule 29.04.2015
comment
Операторы if присутствуют во многих языках и являются одной из основ программирования. Этот сайт предназначен для вопросов и ответов по конкретным проблемам программирования, поэтому такое обсуждение здесь было бы слишком широким и не по теме.   -  person Abhay    schedule 29.04.2015
comment
Не могли бы вы более конкретно описать разницу, которую вы заметили? Также, пожалуйста, укажите, беспокоитесь ли вы исключительно о правильности, а не о стиле/производительности и т. д. Это поможет вам предотвратить закрытие вашего вопроса.   -  person unj2    schedule 29.04.2015


Ответы (4)


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

Когда вы пишете один оператор if else-if else-if ... else, только одно условие может быть оценено как истинное (как только найдено первое условие, которое оценивается как истинное, следующие условия else-if пропускаются).

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

Например :

public void foo (int x)
{
    if (x>7) {
        ...
        return;
    }
    if (x>5) {
        ...
        return;
    }    
}

Будет иметь такое же поведение, как:

public void foo (int x)
{
    if (x>7) {
        ...
    }
    else if (x>5) {
        ...
    }
}

Но без операторов return он будет вести себя иначе, когда x›5 и x›7 оба верны.

person Eran    schedule 29.04.2015

Нет, оба не одинаковы. операторы if будут проверять все условия. Если вы напишете несколько операторов if, он проверит каждое условие. Если еще будет проверять условия, пока не будет выполнено. После того, как if/else if будет удовлетворено, он будет вне этого блока.

person Nimesh    schedule 29.04.2015

Да, это имеет значение: см. если-то и если-то- операторы else.

Кроме того, вы можете легко проверить это.

Код №1:

    int someValue = 10;

    if(someValue > 0){
        System.out.println("someValue > 0");
    }

    if(someValue > 5){
        System.out.println("someValue > 5");
    }

Выведет:

someValue > 0
someValue > 5

Пока код №2:

    int someValue = 10;

    if(someValue > 0){
        System.out.println("someValue > 0");
    }else if(someValue > 5){
        System.out.println("someValue > 5");
    }

Будет выводить только:

someValue > 0

Как видите, код #2 никогда не переходит во второй блок, так как первое выражение (someValue > 0) оценивается как true.

person Virginie    schedule 29.04.2015

if()
{
stmt..
}
else
{
stmt
}
if()
{
stmt
}
here compiler will check for both the if condition.

В приведенном ниже фрагменте кода компилятор проверит условия if, как только первое условие станет истинным, если условие будет пропущено.

        if(){

        }
        else if
        {

        }
        else if
        {

        }
        else if
        {

        }
person kavi temre    schedule 29.04.2015