Tablourile reprezinta structuri de lungime fixa, care stocheaza valori de acelasi tip. In limbajul Java tablourile extind clasa java.lang.Object. Valorile retinute in elementele unui tablou pot fi date primitive sau referinte. Fiecare element dintr-un tablou este identificat unic de un indice numeric.
Crearea unui tablou
Un tablou este declarat in acelasi fel in care este declarata o variabila obisnuita. Tabloul trebuie sa detina un tip si un identificator valid. Tipul tabloului este dat de tipul elementelor continute in tablou.
Declararea unui tablou se poate face in doua moduri:
tip_tablou [ ] nume_tablou; tip_tablou nume_tablou [ ];
Dupa declarearea unui tablou poate fi alocata memorie pentru elementele acestuia. Instantierea unui tablou se realizeaza prin intermediul operatorului new.
nume_tablou = new tip_tablou [numar_elemente];
Este posibil ca atat declararea, cat si instantierea tabloului sa se realizeze intr-un singur pas.
tip_tablou nume_tablou [ ] = new tip_tablou [numar_elemente]; tip_tablou nume_tablou [ ] = {el1, el2, ... , elN};
Referirea unui element al tabloului se realizeaza prin intermediul operatorului [ ]. Acesta primeste o valoare intreaga si returneaza elementul din tablou corespunzator acelui index. Primul element dintr-un tablou are asociat indexul zero.
Determinarea dimensiunii unui tablou
Fiecare tablou are un atribut length care specifica numarul de elemente din tablou.
numar_elemente = nume_tablou.length;
class Culori { | |
public static void main(String[] args) { | |
String culori[] = { "alb", "verde", "rosu", "gaben", "albastru", "negru" }; | |
int i; | |
for (i = 0; i < culori.length; i++) { | |
System.out.println(culori[i]); | |
} | |
} | |
} |
alb verde rosu gaben albastru negru
O alta modalitate de parcurgere a elementelor tabloului, mult mai eficienta, este precizata in exemplul urmator.
class Culori { | |
public static void main(String[] args) { | |
String culori[] = { "alb", "verde", "rosu", "gaben", "albastru", "negru" }; | |
for (String culoare : culori) { | |
System.out.println(culoare); | |
} | |
} | |
} |
alb verde rosu gaben albastru negru
Aplicatia urmatoare implementeaza un algoritm simplu de sortare a elementelor unui tablou de numere intregi (generate aleator cu ajutorul metodei Math.random()). Metoda Math.random() genereaza numere reale cuprinse intre 0.0 si 1.0. Pentru ca elementele tabloului sa fie numere intregi, valoarea generata este trecuta la tipul intreg int prin intermediul unei operatii de schimbare de tip.
(int)(Math.random() * 100);
class Sortare { | |
public static void sortare(int[] numere) { | |
for (int i = 0; i < numere.length; i++) { | |
int min = i; | |
for (int j = i; j < numere.length; j++) { | |
if (numere[j] < numere[min]) | |
min = j; | |
} | |
int temp; | |
temp = numere[i]; | |
numere[i] = numere[min]; | |
numere[min] = temp; | |
} | |
} | |
public static void main(String[] args) { | |
int[] numere = new int[10]; | |
for (int i = 0; i < numere.length; i++) { | |
numere[i] = (int) (Math.random() * 100); | |
} | |
System.out.println("Afisare elemente tablou inainte de sortare"); | |
for (int i = 0; i < numere.length; i++) { | |
System.out.print(numere[i] + " "); | |
} | |
sortare(numere); | |
System.out.println(); | |
System.out.println("Afisare elemente tablou dupa sortare"); | |
for (int i = 0; i < numere.length; i++) { | |
System.out.print(numere[i] + " "); | |
} | |
} | |
} |
Afisare elemente tablou inainte de sortare 32 94 8 68 50 58 47 22 98 11 Afisare elemente tablou dupa sortare 8 11 22 32 47 50 58 68 94 98
Marginile unui tablou sunt intotdeauna verificate in limbajul Java. Daca indexul asociat unui element al tabloului este mai mic decat 0 sau mai mare sau egal cu lungimea tabloului, atunci va fi generata o exceptie de genul ArrayIndexOutOfBoundsException, iar programul va fi incheiat.
Tablouri multidimensionale
In Java exista posibilitatea de a declara tablouri multidimensionale, tablouri ale caror elemente sunt tot tablouri. De exemplu, declararea si instantierea unei matrice se realizeaza astfel:
tip_matrice nume_matrice[ ] [ ] = new tip_matrice [numar_linii] [numar_coloane]; tip_matrice [ ] [ ] nume_matrice = new tip_matrice [numar_linii] [numar_coloane];
Parcurgerea unui tablou multidimensional se realizeaza folosind cicluri imbricate. Pentru a parcurge o matrice sunt necesare doua bucle for. Bucla interioara se executa in intregime pentru fiecare iteratie a buclei exterioare.
class Matrice { | |
public static void main(String[] args) { | |
int[][] matrice = { { 12, 4, 23, 1 }, { 16, 8, 0, 21 }, { 1, 13, 2, 17 } }; | |
for (int i = 0; i < matrice.length; i++) { | |
for (int j = 0; j < matrice[i].length; j++) { | |
System.out.print("matrice[" + i + "," + j + "]=" + matrice[i][j] + "\t"); | |
} | |
System.out.print("\n"); | |
} | |
} | |
} |
matrice[0,0]=12 matrice[0,1]=4 matrice[0,2]=23 matrice[0,3]=1 matrice[1,0]=16 matrice[1,1]=8 matrice[1,2]=0 matrice[1,3]=21 matrice[2,0]=1 matrice[2,1]=13 matrice[2,2]=2 matrice[2,3]=17