Jason. Cała informatyka w jednym miejscu!

Czas na kolejny artykuł edukacyjny z języka Java! Będziemy kontynuować zagadnienie tablic w języku Java, więc teraz dowiesz się do czego służy niejaka tablica zagnieżdżona którą można określić tablicą tablic. Zaraz zobaczysz co to takiego i co się z tym wyprawia 😄!

TABLICA ZAGNIEŻDŻONA W JĘZYKU JAVA OZNACZA TABLICĘ W TABLICY

Powiedzieliśmy sobie, że tablica służy do przechowywania wielu wartości jednego typu danych. Ale że tablica to także osobny typ danych, więc...co stoi na przeszkodzie, żeby tablica była potraktowana jak pojedynczy element innej tablicy 😁? Do tego prostymi słowy sprowadza się tablica zagnieżdżona, która w dosłownym tłumaczeniu oznacza tablicę tablic. Czyli mamy metodę na tworzenie tablic wielowymiarowych 😇! Dlaczego zatem nie nazwałem artykułu "Tablica wielowymiarowa" 🤔?

TAK NAPRAWDĘ NIE MA TABLIC WIELOWYMIAROWYCH 🤯

Być może za wcześnie odkrywam karty, jednak musisz wiedzieć że w języku Java nie ma tablic wielowymiarowych "jako takich"! Tablicy zagnieżdżonej można użyć do tego celu i zaraz Ci pokażę jak się to robi, jednak to nadal będzie "upchnięcie" kilku tablic do jednej. Tablice wielowymiarowe "te prawdziwe" pojawiły się w języku C#, lecz w Javie trzeba to robić przez użycie tablicy zagnieżdżonej.

JAK SIĘ TEGO UŻYWA?

Przypomnijmy sobie definicję tablicy jednowymiarowej, czyli wektora w języku matematycznym:

int[] numbers = new int[4];

Tablica zagnieżdżona w języku Java potrzebuje w zasadzie tylko dwóch dodatków:

int[][] numbers = new int[4][4];

Dodatkowe nawiasy kwadratowe! Jedna para po lewej, druga po prawej stronie operatora przypisania. Liczba tych par musi się po obu stronach ze sobą pokrywać.

README!

To może sugerować zaprzeczenie tego, co napisałem u góry że tu nie ma tablic wielowymiarowych ☝. Jednak przy użyciu takiego zapisu:

int[][] numbers = new int[4][4];

Java "za kotarą" przydziela pamięć dla tablicy mającej zawierać cztery tablice, każda z nich dysponująca czterema elementami:

int[][] numbers = new int[4][];

for (int i = 0; i < 4; ++i) {
	numbers[i] = new int[4];
}

Czyli to nadal jest tablica tablic, bo w jednej tablicy znajdą się cztery "podtablice". Warto znać ten zapis, ponieważ dzięki temu możesz utworzyć tablice, które różnią się między sobą rozmiarem tworząc nieregularne rzędy danych! Temat tablic "postrzępionych" zostawimy na odrębny artykuł.

DEFINIOWANIE BEZPOŚREDNIE

Bezpośrednie zdefiniowanie podtablic i ich elementów już w czasie definicji tablicy? Nie ma sprawy!

int[][] numbers = new int[][]{
	{0, 1, 2, 3},
	{4, 5, 6, 7},
	{8, 9, 10, 11},
	{12, 13, 14, 15}
};

Teraz widać jak na dłoni czemu określamy to tablicą tablic 😉.

ZASADY UZYSKIWANIA DOSTĘPU DO ELEMENTÓW

Domyślacie się pewnie, że skoro tam była jedna para nawiasów kwadratowych, to w przypadku tablicy dysponującej własnymi tablicami będziemy potrzebować dwóch sztuk!

numbers[0][0]

Tak się odwołamy do pierwszego argumentu. A konkretniej, do pierwszego rzędu, pierwszej kolumny. Ponieważ tablica zagnieżdżona ma w sobie tablice, a one już dysponują pojedynczymi wartościami, to ona składa się z dwóch wymiarów które możemy porównać do siatki, tabeli czy planszy do gry.

A co z użyciem pętli? Pojedyncza pętla "for" nie zda egzaminu, ponieważ musimy operować na dwóch wymiarach (natomiast jest możliwe dostać się do każdego argumentu za pomocą sprytnego równania 😉). Tablica zagnieżdżona w języku Java wymaga zastosowania pętli zagnieżdżonych 😯!!!

for (int y = 0; y < numbers.length; ++y) {
	for (int x = 0; x < numbers[y].length; ++x) {
		numbers[y][x] = y*numbers.length + x;
	}
}

Zobaczcie w jaki sposób odwołać się do długości każdej z podtablic! Stosujemy tę samą stałą "length", tylko dla pętli zewnętrznej sprawdzamy długość tablicy, a dla pętli wewnętrznej, długość podtablicy! Pętle "foreach" jak najbardziej są dopuszczalne:

for (int[] rows : numbers) {
	for (int i : rows) {
		System.out.printo(i + "\t");
	}
	
	System.out.println();
}

W pętli zewnętrznej odwołujemy się do pojedynczego rzędu (świadczy o tym jedna para nawiasów kwadratowych), a w środku już do pojedynczej liczby całkowitej "int". Ale miszmasz, co 😀? Użyłem metody "print" zamiast "println", żeby móc wypisywać elementy rzędami (literówka w nazwie, bo nie mogłem zapisać artykułu 😆).

DO INSTANCJI KLAS MUSISZ PODEJŚĆ Z KLASĄ

Mała gra słów i wyjaśniam o co biega 😊. Jeżeli kiedykolwiek zechcesz sobie utworzyć tablicę, w której będą obiekty powstałe z klas (o których więcej informacji przeczytasz tutaj), to musisz pamiętać o tym, że o ile dla typów prostych (takich jak "int") nie trzeba martwić się o przydzielenie pamięci, tak dla obiektu już trzeba to zrobić:

for (int y = 0; y < instances.length; ++y) {
	for (int x = 0; x < instances[y].length; ++x) {
		instances[y][x] = new Instance();
	}
}

Klasy zostaną opisane w jednym z następnych materiałów 😄.

Tablica zagnieżdżona w języku Java

Tablica zagnieżdżona umożliwia definiowanie tablic wielowymiarowych poprzez "opakowanie" jednych tablic w drugie. W celu operowania na wszystkich argumentach, trzeba skorzystać z pętli zagnieżdżonych!


Przekroczyliśmy metę, więc dziękuję za pełne przeczytanie i pamiętaj, że w każdej chwili możesz wrócić do tego artykułu i przypomnieć sobie wszystkie informacje 😎!

PODOBNE ARTYKUŁY