9 JAVA Limbajul JAVA. Tablouri - 16.11.2016 Curs - Programare orientatؤƒ pe obiecte 21 2. Tablouri...

download 9 JAVA Limbajul JAVA. Tablouri - 16.11.2016 Curs - Programare orientatؤƒ pe obiecte 21 2. Tablouri bidimensionale

of 67

  • date post

    20-Sep-2019
  • Category

    Documents

  • view

    0
  • download

    0

Embed Size (px)

Transcript of 9 JAVA Limbajul JAVA. Tablouri - 16.11.2016 Curs - Programare orientatؤƒ pe obiecte 21 2. Tablouri...

  • Programare orientată pe obiecte

    # 9

    Adrian Runceanu www.runceanu.ro/adrian

    2016

    JAVA Limbajul JAVA. Tablouri

  • copyright@www.adrian.runceanu.ro

    Curs 9

    Limbajul JAVA. Tablouri

    16.11.2016 Curs - Programare orientată pe obiecte 2

  • copyright@www.adrian.runceanu.ro

    Tablouri in Java

    1. Tablouri unidimensionale(vectori) 2. Tablouri bidimensionale(matrici) 3. Tablouri multidimensionale

    16.11.2016 Curs - Programare orientată pe obiecte 3

  • copyright@www.adrian.runceanu.ro

    Un tablou este o structura de date care poate sa pastreze mai multe valori de acelasi tip (primitiv sau referinta), memorate intr-o zona de memorie contigua si reunite sub un nume simbolic comun (numele tabloului).

    16.11.2016 Curs - Programare orientată pe obiecte 4

  • copyright@www.adrian.runceanu.ro

    Un tablou poate fi:

    1. unidimensional sau vector

    2. bidimensional sau matrice

    3. multidimensional

    In Java, un tablou este tratat ca un obiect, deci el este un tip referinta.

    16.11.2016 Curs - Programare orientată pe obiecte 5

  • copyright@www.adrian.runceanu.ro

    Declararea si crearea unui tablou unidimensional

    Declararea si crearea tablourilor unidimensionale se realizeaza in doi pasi de catre compilatorul Java:

    1. Se declara o variabila referinta la tablou de un anumit tip (primitiv sau referinta).

     Prin declaratia unei referinte se aloca zona de memorie necesara stocarii referintei in sine (adica a unei adrese de memorie).

     In consecinta, dupa ce se declara o variabila referinta la un tablou, aceasta va contine valoarea null, ceea ce inseamna ca referinta inca nu indica un tablou valid.

    16.11.2016 Curs - Programare orientată pe obiecte 6

  • copyright@www.adrian.runceanu.ro

    Sintaxa folosita pentru declararea unei variabile referinta catre un tablou unidimensional este:

    sau

    unde: - - specifica tipul de date primitiv sau tipul de obiecte

    (dat de clasa) al elementelor tabloului; - - reprezinta numele unei variabile

    referinta la tabloul de tipul ; acesta variabila referinta la un tablou contine valoarea null.

    Nota: parantezele drepte sunt obligatorii, nu delimiteaza o constructie optionala

    16.11.2016 Curs - Programare orientată pe obiecte 7

    [ ] ;

    [ ];

  • copyright@www.adrian.runceanu.ro

    2. Se aloca, efectiv, zona de memorie pentru tabloul declarat la pasul 1 si se initializeaza tabloul.

    Exista doua modalitati pentru a face acest lucu:

    a) folosind operatorul new

    b) initializand direct continutul tabloului

    16.11.2016 Curs - Programare orientată pe obiecte 8

  • copyright@www.adrian.runceanu.ro

    a) Sintaxa folosita pentru alocarea zonei de memorie a unui tablou unidimensional folosind operatorul new este:

    unde: - - reprezinta numele variabilei

    referinta declarata la pasul 1; - - specifica tipul de date primitiv sau tipul de

    obiecte (dat de clasa) al elementelor tabloului; - - reprezinta numarul de elemente ale

    tabloului; poate fi: - o variabila de un tip primitiv - o expresie de un tip primitiv - sau o constanta de un tip primitiv

    16.11.2016 Curs - Programare orientată pe obiecte 9

    = new [];

  • copyright@www.adrian.runceanu.ro

    Nota: 1. De cele mai multe ori programatorii combina declararea

    si alocarea zonei de memorie pentru un tablou intr-o singura instructiune, astfel:

    sau

    2. La crearea unui tablou folosind operatorul new, toate elementele sale vor fi initializate automat cu:

    • 0 pentru cele numerice • false pentru boolean • ‘\0’ pentru tablouri tip caracter • null pentru obiecte

    16.11.2016 Curs - Programare orientată pe obiecte 10

    [ ] = new [];

    [ ] = new [];

  • copyright@www.adrian.runceanu.ro

    De exemplu, pentru declararea si alocarea zonei de memorie pentru un tablou unidimensional cu numele temp de tipul int cu 100 de elemente se foloseste instructiunea:

    int [ ] temp = new int[100];

    16.11.2016 Curs - Programare orientată pe obiecte 11

  • copyright@www.adrian.runceanu.ro

    b) Alocarea zonei de memorie pentru tablou se poate face initializand direct continutul tabloului (la fel ca in limbajul C/C++), dupa urmatoarea sintaxa:

    sau

    unde: - , , …. - reprezinta valorile de

    initializare al caror numar determina si numarul de elemente ale tabloului.

    16.11.2016 Curs - Programare orientată pe obiecte 12

    [ ] ; = {, , ….};

    [ ] = {, , ….};

  • copyright@www.adrian.runceanu.ro

    De exemplu, pentru declarea si alocarea zonei de memorie pentru un tablou unidimensional cu numele temp de tip int cu patru elemente se foloseste instructiunea:

    int [ ] temp = {3, 4, 6, 19};

    16.11.2016 Curs - Programare orientată pe obiecte 13

  • copyright@www.adrian.runceanu.ro

     Declararea si alocarea zonei de memorie pentru un

    tablou unidimensional de obiecte (deci nu tipuri

    primitive) foloseste aceeasi sintaxa.

     Trebuie retinut insa ca dupa alocarea zonei de memorie

    pentru tabloul de referinte la obiectele respective,

    fiecare element (de tip referinta) din tablou va avea

    valoarea null.

     Apoi, pentru fiecare element-tip referinta din tablou

    trebuie alocata memorie, separat, corespunzatoare

    fiecarui obiect referit.

     Aceasta se intampla, deoarece un tablou de obiecte in

    Java este un tablou de referinte la obiectele respective.

    16.11.2016 Curs - Programare orientată pe obiecte 14

  • copyright@www.adrian.runceanu.ro

    De exemplu, pentru declararea si alocarea memoriei

    pentru un tablou de tip Cerc cu numele tablouDeCercuri

    care are ca elemente 5 obiecte (instante) se foloseste

    urmatoarea secventa de instructiuni:

    Cerc [ ] tablouDeCercuri; // declaram un tablou de referinte de tip Cerc

    tablouDeCercuri = new Cerc[5]; //alocam memorie pentru 5 referinte la obiecte de tip Cerc

    for (int i = 0; i < 5; i++)

    {

    tablouDeCercuri[i] = new Cerc(); // se aloca memorie pentru un obiect de tip Cerc in elementul i al tabloului cu numele tablouDeCercuri

    }

    16.11.2016 Curs - Programare orientată pe obiecte 15

  • copyright@www.adrian.runceanu.ro

    Lungimea tablourilor unidimensionale

    Tablourile Java sunt alocate dinamic, ceea ce inseamna ca ele isi pot schimba dimensiunile pe parcursul executiei programului.

    Numarul de elemente care pot fi stocate intr- un tablou oarecare, este permanent retinut in variabila .length.

    De exemplu: float [] tablou = new float [25]; int dimensiune = tablou.length; // dimensiune primeste

    valoarea 25

    16.11.2016 Curs - Programare orientată pe obiecte 16

  • copyright@www.adrian.runceanu.ro

    Accesarea (identificarea) unui element al tabloului unidimensional

    Deoarece elementele unui tablou sunt memorate in ordine, unul dupa altul, intr-o zona contigua, pentru a accesa (sau a referi) un element al unui tablou se specifica numele tabloului din care face parte elementul si pozitia sa in tablou, prin numarul sau de ordine (numerotarea incepe de la 0), astfel:

    in care: reprezinta numarul de ordine al elementului in

    tablou, cuprins intre 0 si - 1; parantezele patrate ([ ]) constituie operatorul de indexare.

    16.11.2016 Curs - Programare orientată pe obiecte 17

    []

  • copyright@www.adrian.runceanu.ro

    Exemple:

    int punctaje[5]; elementele tabloului sunt: punctaje[0], punctaje[1],

    punctaje[2], …. punctaje[4].

    Nota: Toate pozitiile unui tablou sunt verificate, de

    interpretorul Java, daca se incadreaza in limitele tabloului asa cum s-au specificat la crearea tabloului.

    In Java este imposibil sa se acceseze sau sa se atribuie o valoare unei pozitii a tabloului aflata in afara granitelor acestuia.

    Pentru a se evita, in programe, depasirea accidentala a sfarsitului tabloului se testeaza lungimea acestuia prin folosirea variabilei de instanta length.

    16.11.2016 Curs - Programare orientată pe obiecte 18

  • copyright@www.adrian.runceanu.ro

    O parcurgere a unui tablou unidimensional se face cu ajutorul instructiunii for astfel:

    for (int i = 0 ; i < numere.length; i++) numere[i] = i;

    Observatie:  Dat fiind ca tabloul este un tip referinta, operatorul de

    atribuire (=) nu copiaza tablouri.  De aceea, daca x si y sunt tablouri, efectul secventei de

    instructiuni: int [ ] x = new int [50]; int [ ] y = new int [50]; … x = y; este ca x si y refera acum al doilea tablou cu numele y.

    16.11.2016 Curs - Programare orientată pe obiecte 19

  • copyright@www.adrian.runceanu.ro

    Tablouri in Java

    1. Tablouri unidimensionale(vectori) 2. Tablouri bidimensionale(matrici) 3. Tablouri multidimensionale

    16.11.2016 Curs - Programare orientată pe obiecte 20

  • 16.11.2016 Curs - Programare orientată pe obiecte 21

    2. Tablouri bidimensionale

    Tablourile bidimensionale in Java sunt tablouri unidimensionale de referinte catre tablouri unidimensionale (adica, sunt tablouri de referinte la tablouri unidimensionale)