luni, 27 ianuarie 2025

Membri de instanță și membri de clasă

În Java, o clasă poate conține variabile și metode care aparțin fie obiectelor, fie clasei în sine. Acestea se împart în două categorii importante:

Membri de instanță
  • Aparțin fiecărui obiect creat din clasă
  • Fiecare obiect are propria copie
  • Se folosesc pentru a descrie caracteristici specifice fiecărui obiect
Exemplu: culoarea unei mașini, numele unui elev

Membri statici

  • Aparțin clasei, nu obiectelor
  • Există o singură copie, comună pentru toate obiectele
  • Se folosesc pentru informații sau acțiuni generale
Exemplu: numărul total de elevi, o constantă, o metodă de calcul

De ce este important să facem diferența?

Pentru că ne ajută să folosim eficient memoria, să organizăm corect codul, să înțelegem când o informație este comună tuturor obiectelor sau specifică fiecăruia.

Membrii de instanță sunt specifici fiecărei instanțe (obiect) a unei clase, în timp ce membrii de clasă sunt partajați între toate instanțele și pot fi accesați prin intermediul numelui clasei.

Utilizarea potrivită a acestor membri depinde de scopul și necesitățile specifice ale clasei.

Un programator trebuie să cunoască aspectele legate de membrii de instanță și membrii statici ai unei clase în Java din mai multe motive:
  • Membrii de instanță permit programatorilor să definească și să gestioneze datele unui obiect individual, iar membrii statici reprezintă comportamentul comun pentru toate instanțele unei clase.
  • Înțelegerea diferențelor dintre membrii de instanță și membrii statici ajută programatorii să optimizeze utilizarea memoriei.
  • Folosirea adecvată a membrilor de instanță și membrilor statici facilitează reutilizarea codului.
  • Java este un limbaj de programare orientat pe obiect, iar înțelegerea conceptelor legate de membrii de instanță și membrii statici este esențială pentru a crea și gestiona obiecte în cadrul programelor Java.

sâmbătă, 18 ianuarie 2025

Masive bidimensionale în Java

O matrice este o colecție de elemente de același tip, organizate în formă de tabel în care fiecare element este indexat de o pereche de numere ce identifică numărul de rând și numărul de coloană la intersecția cărora se află elementul.

În Java o matrice este formată din mai mulți vectori fiecare reprezentând câte un rând din matrice și mai este numită vector de vectori. 

O matrice bidimensională se declară în felul următor (asemănător ca la vectori): 

int[][] m; // declarația unei matrice bidimensională

sau

int m[][];

Ambele metode de declarare sunt corecte și produc același efect.

Înainte de a folosi o matrice aceasta trebuie creată, trebuie să îi fie alocat spațiu de memorie. De exemplu, următoarele doua secvențe de creare a unei matrici sunt echivalente: 

m = new int [3][5]; //se alocă spațiu pentru o matrice cu dimensiune 3 râduri și 5 coloane

sau
m = new int[3][]; //se alocă spațiu pentru o matrice cu dimensiune 3 râduri
m[0] = new int[5]; // se crează un rândul 0 din matrice cu 5 coloane
m[1] = new int[5]; // se crează un rândul 1 din matrice cu 5 coloane
m[2] = new int[5]; // se crează un rândul 2 din matrice cu 5 coloane
Rețineți faptul că, dacă utilizați prima modalitate forțați toate rândurile să conțină 5 coloane, pe când în cea de a doua rândurile pot avea număr de coloane diferit. 

De asemenea o matrice poate fi declarată și inițializată direct, ca în exemplul de mai jos: 
int[][] a = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
În acest caz compilatorul reține automat dimensiunea matricei în variabila length, despre care vorbim un pic mai jos. 

Pentru a accesa un element din matrice este necesar de a specifica indicele de rând și coloană la intersecția căruia se află elementul dorit folosind construcția: 

variabila_matrice[indice_rând][indice_coloană]
Exemplu:
int[][] m = new int [3][5];
m[1][2] = 39; // se atribuie elementului din rândul 1 coloana 2 valoarea 39
m[0][0] = 44; // se atribuie elementului din rândul 0 coloana 0 valoarea 44
System.out.println(m[1][2]); // se accesează elementul din rândul 1 coloana 2, se afișează 39

Folosind variabila length,  aveți posibilitatea de a obține numărul de rânduri și coloane a matricei. 
Fie ca m este o referință către o matrice, atunci:
  • m.length denotă numărul de rânduri
  • m[i].length denotă numărul de coloane a rândului i din matricea m
Rețineți faptul că, dacă toate rândurile au același număr de coloane puteți folosi expresia m[0].length.

De exemplu: 
double[][] v;
v = new double[15][20];
System.out.println(v.length); // afișează 15
System.out.println(v[0].length); // afișează 20
În exemplul ce urmează este ilustrat cum se lucrează cu un masiv bidimensional în Java folosind date introduse de la tastatură.

Programul începe prin citirea numărului de rânduri și de coloane, apoi creează masivul cu aceste dimensiuni. După aceea, utilizatorul introduce valorile elementelor, rând cu rând, ca într-un tabel.

La final, masivul este afișat pe ecran, pentru a verifica dacă toate datele au fost introduse corect.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

System.out.print("Introduceti numarul de randuri: ");
int n = sc.nextInt();
System.out.print("Introduceti numarul de coloane: ");
int m = sc.nextInt();

int[][] a = new int[n][m];

for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
System.out.print("a[" + i + "][" + j + "] = ");
a[i][j] = sc.nextInt();
}}

System.out.println("Masivul introdus este:");
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
System.out.print(a[i][j] + " ");}
System.out.println();}
}}

Masivele bidimensionale reprezintă un element de bază în programare și se utilizează frecvent în rezolvarea problemelor reale. Înțelegerea modului în care sunt declarate, completate și parcurse în Java este foarte importantă pentru a putea lucra ulterior cu algoritmi mai complecși.

Prin micile exemple prezentate, scopul a fost de a oferi o explicație clară și accesibilă, pas cu pas, astfel încât orice începător să poată înțelege logica matricilor. Recomand exersarea cu diferite dimensiuni și valori, deoarece doar prin practică aceste concepte devin ușor de utilizat.

Succes!
❤️