Ce face Array-uri
Un array (tablou) are o lungime fixă, stabilită la creare, și elemente de același tip. Îl creezi cu valori (int[] note = {9, 10, 8};) sau gol, cu o lungime (new int[5]), caz în care elementele primesc valoarea implicită: 0, false sau null.
Elementele se accesează cu indici de la 0 la length - 1. Un indice în afara acestui interval aruncă ArrayIndexOutOfBoundsException. length este un câmp, nu o metodă (fără paranteze), spre deosebire de String.length().
Clasa java.util.Arrays are metode utile: toString pentru afișare, sort, fill, copyOf, equals. Un array afișat direct cu println arată ceva de forma [I@1b6d3586, nu elementele. Dacă ai nevoie de o colecție care crește, folosește ArrayList.
Exemple
Exemplul 1: Creare, acces și parcurgere
Array-ul creat cu new are valorile implicite (null pentru String). Arrays.toString afișează elementele.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] note = {9, 10, 7, 8};
System.out.println("prima notă: " + note[0] + ", câte: " + note.length);
int suma = 0;
for (int i = 0; i < note.length; i++) {
suma += note[i];
}
System.out.println("media: " + (double) suma / note.length);
String[] orase = new String[3];
orase[0] = "Iași";
orase[2] = "Cluj";
System.out.println(Arrays.toString(orase));
try {
System.out.println(note[4]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Eroare: " + e.getMessage());
}
}
}
Rezultat
prima notă: 9, câte: 4
media: 8.5
[Iași, null, Cluj]
Eroare: Index 4 out of bounds for length 4
Exemplul 2: Sortare, copiere și comparare
Arrays.sort modifică array-ul. copyOf creează un array nou (aici mai lung, completat cu 0). == compară referințele, Arrays.equals conținutul.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] preturi = {45, 12, 99, 30};
Arrays.sort(preturi);
System.out.println("sortate: " + Arrays.toString(preturi));
int[] marit = Arrays.copyOf(preturi, 6);
System.out.println("copie mărită: " + Arrays.toString(marit));
int[] zero = new int[4];
Arrays.fill(zero, 7);
System.out.println("fill: " + Arrays.toString(zero));
int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
System.out.println("a == b: " + (a == b) + ", Arrays.equals: " + Arrays.equals(a, b));
}
}
Rezultat
sortate: [12, 30, 45, 99]
copie mărită: [12, 30, 45, 99, 0, 0]
fill: [7, 7, 7, 7]
a == b: false, Arrays.equals: true
Exemplul 3: Array bidimensional (matrice)
Un int[][] este un array de array-uri. Aici fiecare rând este un elev, iar fiecare coloană o materie. Arrays.deepToString afișează tot.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
String[] elevi = {"Ana", "Mihai", "Ioana"};
int[][] note = {
{9, 10, 8},
{7, 6, 9},
{10, 10, 9},
};
for (int r = 0; r < note.length; r++) {
int suma = 0;
for (int c = 0; c < note[r].length; c++) {
suma += note[r][c];
}
System.out.printf("%-6s media %.2f%n", elevi[r], suma / 3.0);
}
System.out.println(Arrays.deepToString(note));
}
}
Rezultat
Ana media 9.00
Mihai media 7.33
Ioana media 9.67
[[9, 10, 8], [7, 6, 9], [10, 10, 9]]
Greșeli frecvente
- Bucla până la
i <= note.length: ultimul pas iese din array. Condiția corectă estei < note.length. System.out.println(note)afișează tipul și un cod, nu elementele. FoloseșteArrays.toString(note).note.length()cu paranteze nu compilează: la array-urilengtheste câmp.
Comenzi înrudite
for: Bucla clasică cu contor: inițializare, condiție verificată înaintea fiecărui pas și actualizare după fiecare pas.Iteratori și for-each: for-each parcurge pe rând elementele unui array sau ale oricărui Iterable; un Iterator permite și ștergerea în timpul parcurgerii.Variabile și tipuri primitive: O variabilă are un tip fix, declarat la creare; Java are 8 tipuri primitive: byte, short, int, long, float, double, char, boolean.Generics (tipuri generice): Generics parametrizează clase și metode cu tipuri (List<String>, Map<String, Integer>), ca erorile de tip să apară la compilare, nu la rulare.