if i else if od else

0

Cześć
Mam problem ze zrozumieniem czym się różni if i else if od else. Ktoś jakiś czas temu świetnie wyjaśnił różnicę po między if i else if ale nie rozumiem kiedy/po co jest stosowane samo else. else if rozumiem, że jest wykonywane "w przeciwnym wypadku" jeżeli poprzedni if się nie zgadza, a co z samym else, kiedy jest stosowany i co daje?

2

Taki kod:

if (warunek1) {
  kod1;
} else if (warunek2) {
  kod2;
} else if (warunek3) {
  kod3;
} else {
  kod4;
}

Jest równoważny takiemu:

if (warunek1) {
  kod1;
} else {
  if (warunek2) {
    kod2;
  } else {
    if (warunek3) {
      kod3;
    } else {
      kod4;
    }
  }
}

Z tego można wyciągnąć taki wniosek:
Jeśli któryś z kodów oznaczonych kodX się wykona to na pewno nie wykona się żadnen z pozostałych kodów oznaczonych kodX.

Natomiast w takim przypadku:

if (warunek1) {
  kod1;
}
if (warunek2) {
  kod2;
}
if (warunek3) {
  kod3;
} else {
  kod4;
}

Tutaj za każdym razem wykona się jeden kod z kodów oznaczonych jako kod3 i kod4, ponadto może się wykonać jeden z lub oba kody kod1 i kod2.

0

po polskiemu:
jeżeli warunek spełniony to (if)
w przeciwnym wypadku jeżeli inny warunek spełniony (else if)
w przeciwnym wypadku jeżeli jeszcze inny warunek spełniony (else if)
jeśli żaden powyższy nie spełniony (elsse)

0
abrakadaber napisał(a):

po polskiemu:
jeżeli warunek spełniony to (if)
w przeciwnym wypadku jeżeli inny warunek spełniony (else if)
w przeciwnym wypadku jeżeli jeszcze inny warunek spełniony (else if)
jeśli żaden powyższy nie spełniony (elsse)

To jaki jest sens używać samego else jeżeli warunek dla if nie został spełniony to można używać else if lub odwrotnie jeżeli if nie został spełniony to można używać samego else.
Nie ogarniam :(.

@Edit: A może to zależy tylko od tego jak sobie zbudujemy kod, tak jak to Wibowit wyjaśniał?

0

Taki że przy [code] if (warunek1) kod1
else if (warunek 2) kod 2 [/code]
kod 2 wykona się tylko jeśli warunek 1 okaże się fałszywy, zaś warunek 2 prawdziwy, w tym przypadku może nie wykonać się żaden jeśli oba będą fałszywe. Jeśli natomiast pierwszy okaże się prawdziwy, to drugi nie będzie nawet sprawdzany (bo else i tak uniemożliwi mu wykonanie kodu2)
zaś przy [code] if (warunek) kod 1
else kod 2 [/code] wykona się albo jeden albo drugi zależnie od tego czy warunek był spełniony czy też nie

0

@rubesom OMG
jeśli używasz "else if" to podajesz warunek
jeśli używasz samego "else" to to jest opcja "jeśli poprzednie nie były spełnione to wykonaj to"
Czyli na przykład:

if (nie_umiem_czytać){

} else if(nie_umiem_pisać){

}else{ //wszystkie inne przypadki

}
0

Przykład:

Sprawdzamy jaki znak został wprowadzony przez użytkownika.
Jeśli "a" to wypisujemy "1", jeśli "b" to wypisujemy "2", jeśli dowolny inny znak niż te dwa powyżej to wypisujemy "3".

Kod:

if(znak == 'a')
  print("1");
else if(znak == 'b')
  print("2");
else
  print("3");
0
liczba = jakaśLiczba
if (liczba < 0) {
  print "liczba jest ujemna"
} else if (liczba > 0) {
  print "liczba jest dodatnia"
} else {
  print "liczba to zero"
}

W powyższym przykładnie można zamienić else na else if (liczba == 0), tylko po co?

else oraz else if są dlatego, że możesz mieć zarówno konstrukcje typu:

if (warunek) {
 kod1;
} else {
 kod2;
}

Jak i konstrukcje typu:

if (warunek) {
 kod1;
} else if (warunekKtoryNieJestOdwrotnyDoPowyzszego) {
 kod2;
} else { // tutaj wpada jeśli żaden z powyższych warunków nie został spełniony
 kod3;
}

edit:
ehhh, poza podium :P

PS:
dodatkowo wywalenie else z else if może skutkować innym zachowaniem kodu. Np:

char znak = 'a'; // jakiś znak
if (Character.isLowerCase(znak)) {
  znak = Character.toUpperCase(znak);
} else if (Character.isUpperCase(znak)) {
  znak = Character.toLowerCase(znak);
} // znak nie musi być literą, może być cyfrą, dlatego mamy else if

Kod powyżej będzie zmieniał wielkość znaku z dużej na małą i odwrotnie, natomiast jeśli wytniemy if z else if to kod będzie zawsze zamieniał wielkość znaku na małą:

char znak = 'a'; // jakiś znak
if (Character.isLowerCase(znak)) {
  znak = Character.toUpperCase(znak);
}
if (Character.isUpperCase(znak)) {
  znak = Character.toLowerCase(znak);
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1