Spis treści
Tablice mogą mieć więcej, niż jeden wymiar. Jeżeli zdefiniujemy tablicę tablic, to wtedy będzie to tablica dwuwymiarowa – każdy element tablicy będzie kolejną tablicą, do której będziemy mogli się odnieść za pomocą jej indeksów.
Aby zdefiniować tablicę wielowymiarową, dodajemy do definicji kolejny zestaw nawiasów kwadratowych:
int[][] tablica2d = new int[3][5];
Zdefiniowana powyżej tablica to tablica trzech tablic, z których każda może przechowywać pięć wartości typu int.
Aby skorzystać z tej tablicy i odnieść się do konkretnego elementu pod-tablicy, dodajemy kolejny zestaw nawiasów kwadratowych [ ]:
public class TablicaDwuwymiarowa { public static void main(String[] args) { int[][] tablica2d = new int[3][5]; // pierwszy element pierwszej pod-tablicy tablica2d[0][0] = 5; // drugi, trzeci, i czwarty element drugiej pod-tablicy tablica2d[1][1] = 10; tablica2d[1][2] = 100; tablica2d[1][3] = 1000; // drugi element trzeciej pod-tablicy tablica2d[2][1] = 50; System.out.println(tablica2d[0][0]); System.out.println(tablica2d[0][4]); System.out.println(tablica2d[1][3]); System.out.println(tablica2d[2][3]); } }
W tym przykładzie odnosimy się do każdej z trzech pod-tablic – indeks podany w pierwszym zestawie nawiasów kwadratowych [ ] to indeks pod-tablicy, do której chcemy się odwołać, więc zapis:
tablica2d[0] tablica2d[1] tablica2d[2]
to odniesienie się do, kolejno, pierwszej, drugiej, i trzeciej pod-tablicy (bo indeksy zaczynamy od 0). Skoro elementami tablica2d są inne tablice, to możemy teraz dopisać kolejny zestaw nawiasów kwadratowych z indeksem, aby odnieść się do konkretnego elementu pod-tablicy. Dla przykładu, zapis:
tablica2d[0][0]
to odniesienie się do pierwszego elementu pierwszej pod-tablicy. Z kolei:
tablica2d[2][3]
to odniesienie się do czwartego elementu trzeciej pod-tablicy.
W powyższym przykładowym programie ustawiamy wartości kilku elementów pod-tablic oraz kilka z nich wypisujemy – zauważmy, że wypisujemy kilka elementów, których wartości nie ustawiliśmy – jak już wiemy, domyślne wartości, jakie przyjmują niezainicjalizowane elementy tablic typu int to zera – stąd na ekranie zobaczymy:
Możemy dowiedzieć się, ile ma każdy z wymiarów tablicy wielowymiarowej używając atrybutu length. Poniżej pokazano, jak odczytać rozmiar obu wymiarów:
System.out.println("Pierwszy wymiar: " + tablica2d.length); System.out.println("Drugi wymiar: " + tablica2d[0].length);
Wynik działania:
W poprzednim rozdziale zobaczyliśmy, że pętle w prosty sposób umożliwiają nam przechodzenie przez elementy tablicy. Aby przejść przez tablicę wielowymiarową, możemy użyć zagnieżdżonych pętli:
for (int i = 0; i < tablica2d.length; i++) { for (int j = 0; j < tablica2d[i].length; j++) { System.out.print(tablica2d[i][j] + ", "); } System.out.println(); // nowa linia }
W tym przykładzie skorzystaliśmy z zagnieżdżonej pętli for – w pętli zewnętrznej iterujemy po "głównym" wymiarze tablicy – w tym przypadku, ma on trzy elementy – trzy pod-tablice. W pętli wewnętrznej przechodzimy natomiast przez wszystkie elementy każdej pod-tablicy (gdzie każda z nich ma pięć elementów).
Zwróćmy uwagę na to, jak zapisany jest warunek pętli wewnętrznej:
j < tablica2d[i].length
Tak zapisany warunek będzie korzystał z rozmiaru każdej pod-tablicy podczas wykonywania się pętli wewnętrznej.
Na ekranie zobaczymy następujące wartości (część z widocznych wartości ustawiliśmy w jednym z fragmentów kodu powyżej – pozostałe to niezainicjalizowane wartości domyślne, czyli zera):
Inicjalizacja tablic wielowymiarowych¶
Tablicę jednowymiarową inicjalizowaliśmy w następujący sposób:
double[] rzeczywiste = { 3.14, 5, -20.5 };
By zainicjalizować tablicę więcej niż jednego wymiaru, należy użyć kolejnego zestawu nawiasów klamrowych:
public class TablicaDwuwymiarowaInicjalizacja { public static void main(String[] args) { char[][] kwadrat = { { 'X', 'X', 'X', 'X' }, { 'X', 'O', 'O', 'X' }, { 'X', 'O', 'O', 'X' }, { 'X', 'X', 'X', 'X' } }; for (int rzad = 0; rzad < kwadrat.length; rzad++) { for (int kolumna = 0; kolumna < kwadrat[rzad].length; kolumna++) { System.out.print(kwadrat[rzad][kolumna]); } System.out.println(); // nowa linia } } }
Aby zainicjalizować tablicę dwuwymiarową kwadrat, w "głównych" nawiasach klamrowych { } zamieściliśmy kolejne zestawy nawiasów klamrowych, w których znajdują się wartości każdej z pod-tabel, jakie mają się w nich znajdować.
W zagnieżdżonej pętli przechodzimy przez wszystkie pod-tablice i wypisujemy je na ekran.
W wyniku działania powyższego programu, na ekranie zobaczymy: