Ce face if și else
if evaluează o condiție între paranteze, care trebuie să fie de tip boolean. Dacă este true, se execută blocul dintre acolade. Ramura opțională else se execută când condiția este false.
Pentru mai multe cazuri legi condițiile cu else if: ele se verifică de sus în jos și se execută doar prima ramură adevărată. Când compari o singură valoare cu mai multe constante, switch este adesea mai clar.
Acoladele sunt opționale pentru o singură instrucțiune, dar e bine să le pui mereu: fără ele, un al doilea rând adăugat mai târziu nu face parte din if, deși pare indentat ca și cum ar face.
Exemple
Exemplul 1: Calificativul unei note
Condițiile se verifică în ordine. Pentru nota 8, prima condiție (>= 9) este falsă, a doua este adevărată, iar restul nu se mai verifică.
public class Main {
static String calificativ(int nota) {
if (nota >= 9) {
return "foarte bine";
} else if (nota >= 7) {
return "bine";
} else if (nota >= 5) {
return "suficient";
} else {
return "insuficient";
}
}
public static void main(String[] args) {
int[] note = {10, 8, 5, 3};
for (int nota : note) {
System.out.println("nota " + nota + ": " + calificativ(nota));
}
}
}
Rezultat
nota 10: foarte bine
nota 8: bine
nota 5: suficient
nota 3: insuficient
Exemplul 2: Condiții compuse
Livrarea este gratuită peste 200 de lei sau pentru clienții fideli, dar doar în orașele deservite.
import java.util.List;
public class Main {
static final List<String> ORASE = List.of("Iași", "Cluj", "București");
static void livrare(String oras, double total, boolean fidel) {
if (!ORASE.contains(oras)) {
System.out.println(oras + ": nu livrăm încă");
} else if (total >= 200 || fidel) {
System.out.println(oras + ": livrare gratuită");
} else {
System.out.printf("%s: livrare 15 lei (mai adaugă %.2f lei)%n", oras, 200 - total);
}
}
public static void main(String[] args) {
livrare("Iași", 250, false);
livrare("Cluj", 80, true);
livrare("București", 120.50, false);
livrare("Suceava", 300, true);
}
}
Rezultat
Iași: livrare gratuită
Cluj: livrare gratuită
București: livrare 15 lei (mai adaugă 79.50 lei)
Suceava: nu livrăm încă
Greșeli frecvente
if (nota >= 5);cu punct și virgulă:if-ul are o instrucțiune goală, iar blocul de după se execută mereu.- Condiții în ordine greșită:
if (nota >= 5) ... else if (nota >= 9)nu ajunge niciodată la a doua ramură pentru nota 10. - Compararea textelor cu
==în condiție:if (oras == "Iași"). Folosește"Iași".equals(oras).
Comenzi înrudite
switch, case și default: Alege ce cod se execută comparând o valoare cu mai multe constante case; default tratează orice altă valoare.boolean: Tipul pentru valori logice: true sau false. Condițiile din if, while și for trebuie să fie boolean.Operatori: Operatorii aritmetici, de comparație, logici, de atribuire, ternar și pe biți din Java, cu ordinea lor de evaluare.switch expressions și yield: switch folosit ca expresie care produce o valoare; yield returnează valoarea dintr-o ramură cu bloc.