Instructiunea if. Tipul boolean

Pana acum tot codul pe care l-am scris a implicat o insiruire de instructiuni fara nici o ramificatie. Practic indiferent de intrarile programului acesta a curs pe acelasi fir, singura diferenta constand in calculele efectuate. Dar in realitate programele trebuie sa se ramifice in functie de anumite conditii si pentru a permite acest lucru exista instructiunea if. Scopul acesteia este de a permite executia unei secvente de cod in functie de o anumita conditie. Conditia este o expresie a carei evaluare produce un rezultat avand tipul boolean. Tipul boolean este si el un tip primitiv la fel ca si cele invatate pana acum (intregi si reale), diferenta fata de acestea este ca o variabila de acest tip poate lua doar doua valori: true sau false.

Operatorii care produc un rezultat boolean sunt cei numiti operatori conditionali:

Operator Denumire Explicatie
< Mai mic a < b returneaza true daca a e mai mic ca b si false in caz contrar
> Mai mare a > b returneaza true daca a e mai mare ca b si false in caz contrar
<= Mai mic sau egal a <= b returneaza true daca a e mai mic sau egal cu b si false in caz contrar
>= Mai mare sau egal a >= b returneaza true daca a e mai mare sau egal cu b si false in caz contrar
== Egal a == b returneaza true daca a e egal cu b si false in caz contrar
!= Diferit a != b returneaza true daca a e diferit de b si false in caz contrar

Necesitatea instructiunii if apare in momentul cand in enuntul unei probleme sau al unui algoritm apare cuvantul "daca". Exemplu: Sa se implementeze o metoda care primeste ca parametru o nota. Daca aceasta este mai mare ca 4 atunci metoda afiseaza cuvantul "Admis".


public class Nota {
  public static void afiseazaRezultat(int nota) {
    if (nota > 4) {                          // daca nota e mai mare ca 4
      System.out.println("Admis");           // afiseaza cuvantul "Admis"
    }
  }
}

Expresia nota > 4 se evalueaza la un boolean si astfel codul din if se va executa doar daca rezultatul comparatiei este true. Si varianta de mai jos functioneaza si este echivalenta, desi in cazul acesta adauga o complicare nenecesara a codului.


public class Nota {
  public static void afiseazaRezultat(int nota) {
    boolean rezultat = nota > 4;             // variabila rezultat primeste o valoare de true sau false in functie de rezultatul compararii
    if (rezultat) {                          // daca rezultat este true
      System.out.println("Admis");           // afiseaza cuvantul "Admis"
    }
  }
}

In functie de context exista si forme usor mai complexe ale intructiunii if. De exemplu la problema de mai sus nu am tratat cazul ca nota e mai mica decat 4. Sa presupunem ca in acest caz vrem sa afisam cuvantul "Respins". Pentru asta trebuie sa folosim si instructiunea else. Codul din else se executa daca expresia din if e evaluata la false


public class Nota {
  public static void afiseazaRezultat(int nota) {
    if (nota > 4) {                          // daca nota e mai mare ca 4
      System.out.println("Admis");           // afiseaza cuvantul "Admis"
    } else {                                 // altfel
      System.out.println("Respins");         // afiseaza cuvantul "Respins"    
    }
  }
}

Ultima varianta, si cea mai complexa este else-if. Aceasta permite inlantuirea mai multor secvente de else si if. Sa presupunem ca vrem in plus fata de codul existent sa verificam daca nota e mai mare ca 10 si sa afisam in acest caz un mesaj de eroare, de asemenea sa verificam daca nota e mai mica decat 1 si sa afisam si in acest caz un mesaj de eroare corespunzator. Codul ar arata astfel:


public class Nota {
  public static void afiseazaRezultat(int nota) {
    if (nota > 10) {                            // daca nota e mai mare ca 10
      System.out.println("Nota e prea mare");   // afiseaza mesaj ca nota e prea mare
    } else if (nota < 1) {                      // daca nota e mai mica decat 1
      System.out.println("Nota e prea mica");   // afiseaza mesaj ca nota e prea mica
    } else if (nota > 4) {                      // daca nota e mai mare ca 4
      System.out.println("Admis");              // afiseaza cuvantul "Admis"
    } else {                                    // altfel
      System.out.println("Respins");            // afiseaza cuvantul "Respins"    
    }
  }
}

Este momentul sa arati ce ai invatat. Rezolva testul TR8 si testul TR11 pentru a-ti verifica cunostintele dobandite pana acum.