luni, 29 septembrie 2025

Instrucțiuni de decizie în Limbajul Java

 Instrucțiunea if-else

Sintaxă:                                    

if (expresie) {

... lista instrucțiuni }

else  {

... lista instrucțiuni }

Semantică:

Se evaluează expresia dintre paranteze care trebuie sa returneze o valoare booleană. Dacă ea returnează true atunci se execută lista de instrucțiuni din corpul if. Dacă ea returnează false se execută lista de instrucțiuni else.

 

Exemplu:

int x = 4;

if( x % 2 == 0 )

x = 100;

else

x = 1000;             

Instrucțiunea if  poate avea mai multe forme:






Instrucțiunea switch-case

Sintaxă:

switch (expresie) {

   case valoare_particulara1 : < expresie 1 >    break;

   case valoare_particulara2 : < expresie 2 >    break;

    …

   default : < expresie >

  }

Semantică:

Execuţia instrucțiunii switch începe întotdeauna prin evaluarea expresiei dintre parantezele rotunde. Această expresie trebuie să fie de tipul caracter, octet, întreg scurt sau întreg. Selectorul instrucțiunii switch poate fi și de tip String începând cu versiunea Java 7.

 După evaluarea expresiei se trece la compararea valorii rezultate cu valorile particulare specificate în etichetele case din interiorul blocului de instrucțiuni. Dacă una dintre valorile particulare este egală cu valoarea expresiei, se execută instrucțiunile începând de la eticheta case corespunzătoare acelei valori în jos, până la capătul blocului. Dacă nici una dintre valorile particulare specificate nu este egală cu valoarea expresiei, se execută instrucțiunile care încep cu eticheta default, dacă aceasta există.

Este important ca fiecare expresie de tip case să fie terminată cu instrucțiunea break deoarece aceasta asigura ieșirea din structură.

Notă!

1.     Constantele case trebuie să fie de același tip ca și selectorul.

2.     Nu pot exista 2 constante case cu același nume.

3.     Cel mult o constantă poate fi asociată unui selector.

 

Exemplu switch cu selector de tip int:


public class Main{

  public static void main(String[] args) {

   int selector = 2;

    switch(selector){

     case 1:

       System.out.println("Valoarea este egala cu 1");

     break;

     case 2:

       System.out.println("Valoarea este egala cu 2");

     break;

     case 3:

       System.out.println("Valoarea este egala cu 3");

     break;

     case 4:

       System.out.println("Valoarea este egala cu 4");

     break;

   default:

      System.out.println("Valoarea nu aparține intervalului");

    }

}}



Rezultat: 


Exemplu switch cu break omis:


public class Main{

  public static void main(String[] args) {

   int selector = 6;

    switch(selector){

     case 2:

     case 4:

     case 6:

     case 8:

       System.out.println("Numar par");

     break;

   default:

      System.out.println("Numar impar");

    }

}}


Rezultat: 


Notă! Într-un switch, dacă nu pui break, programul continuă să execute și instrucțiunile din cazurile următoare. Acest comportament se numește fall-through.

Poate fi util pentru a grupa cazuri similare, dar dacă uiți break din greșeală, programul poate produce rezultate neașteptate. 



Exemplu switch cu selector de tip String:


public class Main{

  public static void main(String[] args) {

  String luna = "Iunie";

  switch (luna) {

    case "Iunie":

    case "Iulie":

    case "August":

       System.out.println("E vară");

    break;

   default:

    System.out.println("Nu e vară");

}

}} 




Exemplu de expresie cu switch: Începând cu Java 12, instrucțiunea switch a fost extinsă și poate fi folosită nu doar ca o structură de control, ci și ca o expresie care returnează o valoare. 
Asta înseamnă că putem atribui direct rezultatul unui switch unei variabile. 

public class Main{
  public static void main(String[] args) {
   int valoare = 3;
   String rezultat = switch (valoare) {
    case 1 -> "unu";
    case 2 -> "doi";
    case 3, 4 -> "trei sau patru";
    default -> "alt număr";
     };
System.out.println(rezultat);
}}



Să aveți o zi deosebită!
❤️

duminică, 21 septembrie 2025

Tipuri identice și tipuri compatibile. Conversia implicită și explicită


Tipuri identice
Două variabile sunt de tip identic dacă:
  • sunt declarate cu același tip de date (ex. ambele int, ambele double, ambele String).
  • atribuirea dintre ele se face direct, fără conversii.
Exemplu:


public class TipuriIdentice {
public static void main(String[] args) {
   int a = 5;
// variabilă int
   int b = 10; // variabilă int
   a = b; // tipuri identice: corect
   System.out.println("a = " + a); // afișează 10
}
}

Tipuri compatibile

Două variabile sunt de tipuri compatibile dacă:
  • pot fi atribuite una alteia, dar este necesară o conversie de tip (implicită sau explicită).
  • exemplu: int este compatibil cu double, dar nu identic.

Exemplu:

public class TipuriCompatibile {
public static void main(String[] args) {
int x = 7;
double y = x;
// conversie implicită int → double
System.out.println("y = " + y); // afișează 7.0
double z = 9.8;
int w = (int) z; // conversie explicită double → int
System.out.println("w = " + w); // afișează 9
}
}

Deci:
  • intdouble se face automat (se mărește precizia).
  • double int necesită conversie explicită (se pierde partea zecimală).
Rețineți ! 

Implicit în limbajul Java se convertesc:
  • byte la short, int, long, float, double;
  • short la int, long, float, double;
  • int la long, float, double;
  • char la int, long, float, double;
  • long la float, double;
  • float la double;
Explicit
în limbajul Java se convertesc:
  • byte la char;
  • char la byte, short;
  • short la byte, char;
  • int la byte, short, char;
  • long la byte, short, char, int, long;
  • float la byte, short, char, int, long;
  • double la byte, short, char, int, long, float.

Situații de incompatibilitate

Există cazuri unde tipurile nu sunt nici identice, nici compatibile.

Exemplu

public class Incompatibil {
public static void main(String[] args) {
int nr = 10;
String text = "Salut";
nr = text;
// EROARE: int și String nu sunt compatibile
}
}

Deoarece int și String sunt tipuri complet diferite acestea nu pot fi atribuite.