Множеството оператори „if“ и „if-else-if“ еднакви ли са за взаимно изключващи се условия?

Има ли разлика между писането на множество 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) {
        ...
    }
}

Но без операторите за връщане ще има различно поведение, когато x›5 и x›7 са верни.

person Eran    schedule 29.04.2015

Не и двете не са еднакви. ако изявленията ще проверят всички условия. Ако ще напишете множество оператори if, това ще провери всяко условие. If else ще проверява условията, докато не бъдат удовлетворени. След като if/else if е удовлетворено, той ще бъде извън този блок.

person Nimesh    schedule 29.04.2015

Да, има значение: вижте If-then и if-then- изявления 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 стане истина, оставащото условие if ще бъде заобиколено.

        if(){

        }
        else if
        {

        }
        else if
        {

        }
        else if
        {

        }
person kavi temre    schedule 29.04.2015