1. Array-uri unidimensionale
Un array este o secventa de elemente de acelasi tip.
Primul lucru pe care trebuie sa il intelegi este ca un array este un obiect
Un array de 10 elemente intregi se declara astfel:
int [] arr = new int [10];
Elementele in array se acceseaza folosind un indice
Intr-un array avand n elemente, primul element are indicele 0, ultimul element are indicele n-1
De exemplu, in cazul nostru, primul element este arr[0], iar ultimul element este arr[9]
In acest moment, nu am initializat array-ul, asa ca compilatorul a initializat fiecare element la valoarea 0
(deoarece elementele sunt numere intregi).
Continutul array-ului poate fi vizualizat astfel:
arr[0] = 0
arr[1] = 0
arr[2] = 0
arr[3] = 0
arr[4] = 0
arr[5] = 0
arr[6] = 0
arr[7] = 0
arr[8] = 0
arr[9] = 0
Sa presupunem ca vrem sa initializam array-ul arr astfel incat:
Este banal de facut folosind o bucla for
for (int i = 0; i < arr.length; i++)
arr[i] = i * i;
Dupa acesta operatie, continutul array-ului arr va arata astfel:
arr[0] = 0
arr[1] = 1
arr[2] = 4
arr[3] = 9
arr[4] = 16
arr[5] = 25
arr[6] = 36
arr[7] = 49
arr[8] = 64
arr[9] = 81
Sa presupunem ca vrem sa setam al 5-lea element la valoarea 99
De ce arr[4] si nu arr[5] ? Pentru ca, precum am spus, primul indice in array este 0, deci al 5-lea element este arr[4]
In continuare iti dau un programel de test, care prezinta conceptele expuse pana in acest moment.
//UnidimensionalArray.java
public class UnidimensionalArray {
int [] arr;
public UnidimensionalArray(int n) {
arr = new int[n];
}
public void printArray() {
for (int i = 0; i < arr.length; i++)
System.out.printf("arr[%d] = %d\n", i, arr[i]);
}
public void initArray() {
for (int i = 0; i < arr.length; i++)
arr[i] = i * i;
}
public static void main(String [] args) {
UnidimensionalArray myArr = new UnidimensionalArray(10);
System.out.println("Afisam elementele inainte de initializare");
myArr.printArray();
System.out.println("Initializam array-ul");
myArr.initArray();
System.out.println("Afisam elementele dupa initializare");
myArr.printArray();
}
}
Compilare:
javac UnidimensionalArray.java
Executie:
1. Array-uri multidimensionale
Java suporta array-uri multidimensionale.
Pentru simplificare, vom discuta numai despre array-uri bidimensionale
Sa presupunem ca dorim sa definim un array avand 2 linii si 3 coloane
O facem astfel:
int [][] arr = new int[2][3];
Precum am spus, indicii intr-un array incep de la 0.
Intr-un array bidimensional arr[m][n], primul element este arr[0][0], iar ultimul este arr[m-1][n-1];
unde m este numarul de linii, iar n este numarul de coloane.
In cazul nostru, primul element este arr[0][0], iar ultimul element este arr[1][2]
In acest moment, noi nu am initializat array-ul arr.
Compilatorul a initializat fiecare element al arra-ului la valoarea 0.
Sa presupunem ca vrem sa initializam array-ul astfel:
unde i este indicele curent pe linie iar j indicele curent pe coloana
Continutul array-ului poate fi vizualizat astfel:
arr[0][0] = 0
arr[0][1] = 1
arr[0][2] = 2
arr[1][0] = 1
arr[1][1] = 2
arr[1][2] = 3
E mai intuitiv sa vizualizezi continutul sub forma unei matrici (asa cum ai studiat la matematica):
0 1 2 --> prima linie: arr[0]
1 2 3 --> a doua linie: arr[1]
In momentul de fata ne putem pune intrebarea: care este lungimea array-ului arr ?.
Adica, care este valoarea lui arr.length
Raspunsul este 2. De ce ? Pentru ca avem 2 linii.
Pentru a intelege acest lucru, trebuie sa intelegi urmatorul fapt fundamental: orice array multidimensional in Java este de fapt implementat ca un array unidimensional care contine, ca si elemente, referinte la array-uri cu un ordin mai mic
Sa exemplificam pe cazul nostru:
- arr este implementat de fapt ca un array unidimensional de 2 elemente
- cele 2 elemente pot fi accesate sub forma arr[0] si arr[1]
- cele 2 elemente sunt de fapt referinte la un array unidimensional
arr[0] este o referinta la array-ul unidimensional (0, 1, 2)
arr[1] este o referinta la array-ul unidimensional (1, 2, 3)
arr[0] --> (0, 1, 2)
arr[1] --> (1, 2, 3)
Deci avem:
arr.length = 2
arr[0].length = 3
arr[1].length = 3
Ca si data trecuta, includ un program de test.
Citeste codul si comentariile cu atentie si ruleaza programul
//BidimensionalArray.java
class BidimensionalArray {
private final static int NUM_LINES = 2;
private final static int NUM_COLS = 3;
public static void main (String [] args) {
int [][] arr = new int[NUM_LINES][NUM_COLS];
int i; /// indice folosit sa parcurgem liniile
int j; /// indice folosit sa parcurgem coloanele
// intializam array-ul
for (i = 0; i < NUM_LINES; i++)
for (j = 0; j < NUM_COLS; j++)
arr[i][j] = i + j;
// afisam dimensiunea array-ului
System.out.println("Dimeniunea array-ului este: " + arr.length);
// afisam continutul array-ului
for (i = 0; i < NUM_LINES; i++)
for (j = 0; j < NUM_COLS; j++)
System.out.printf("arr[%d][%d] = %d \n", i, j, arr[i][j]);
// array-ul arr este de fapt un array unidimensional avand 2 elemente
// fiecare din cele 2 elemente este o referinta catre un array
// unidimensionalavand 3 elemente
// vezi codul de mai jos
// care este lungimea fiecarui array ? (arr[0], arr[1])
for (i = 0; i < NUM_LINES ; i++)
System.out.printf("arr[%d].length = %d\n", i, arr[i].length);
// o alta modalitate de a parcurge array-ul bidimensional
// care aplica ca am spus mai sus: array-ul arr este de fapt un array
// unidimensional avand 2 elemente
System.out.println("Inca o modalitate de a parcurge array-ul");
for (i = 0; i < arr.length; i++)
for (j = 0; j < arr[i].length; j++)
System.out.printf("arr[%d][%d] = %d \n", i, j, arr[i][j]);
}
}
Compilare:
javac BidimensionalArray.java
Executie: