"Cześć, mój najmądrzejszy uczeń!"

"Cześć Rysiu!"

„Tęsknisz za nową dyskusją na temat tablic? Cóż, dzisiaj mamy dla ciebie jedną! Dzisiaj opowiem ci o tablicach postrzępionych i wielowymiarowych”.

„Brzmi krwiożerczo i przerażająco”.

„Nie martw się, prawdziwy programista zawsze poradzi sobie z tablicą, nawet gdy obnaży zęby. Żarty na bok, poszarpana tablica odzwierciedla zdolność nie tylko do zamiany wierszy dwuwymiarowej tablicy, ale także do konstruowania tablicy jednak musi być.

„Powiedzmy, że chcesz, aby pierwszy wiersz dwuwymiarowej tablicy miał długość 10, a drugi 50”.

– Naprawdę możesz to zrobić?

„Absolutnie! Najpierw tworzymy „kontener kontenerów” — to pierwsza tablica, w której będą przechowywane odwołania do tablic wierszy. Robi się to w następujący sposób:

int[][] name = new int[height][];

„Po prostu pomijasz drugi wymiar , a maszyna Java tworzy kontener kontenerów. Oto, co będzie w pamięci po wykonaniu tego kodu:

„I wiesz już, jak tworzyć jednowymiarowe tablice 🙂

Tak będzie wyglądał wynikowy kod:

// Matrix of important data
int[][] matrix = new int[2][];
matrix[0] = new int[10];
matrix[1] = new int[50]
Tablica dwuwymiarowa

Wiersz zerowy to tablica 10elementów
. Pierwszy wiersz to tablica 50elementów

„Właśnie stworzyliśmy tak zwaną „postrzępioną” tablicę. Jej krawędzie są szorstkie i nieregularne.

„A jeśli teraz chcemy wyświetlić wszystkie elementy tej tablicy na ekranie, to tablica tablicy lengthsię przyda: w końcu długości wierszy tablicy są różne.

„Przy okazji, czy możesz mi powiedzieć, jak znaleźć długość„ kontenera kontenerów ”w naszym przykładzie? Jest to również obiekt tablicowy, co oznacza, że ​​ma długość”.

"Prawdopodobnie matrix.length?"

„Zgadza się! A dla tablic tworzących wiersze użylibyśmy matrix[0].lengthwiersza zerowego”.

„A po pierwsze, to znaczy, że użylibyśmy matrix[1].length?”

„Zgadza się. W pierwszym przypadku wykonanie polecenia da 10, w drugim przypadku wynik wyniesie 50.

Praca z dwuwymiarową tablicą

„Teraz spróbujmy wyświetlić tablicę dwuwymiarową:

int[][] matrix = new int[3][];
matrix[0] = {1, 2, 3, 4, 5, 6};
matrix[1] = {1, 2, 3};
matrix[2] = {1};
for (int i = 0; i < matrix.length; i++)
{
   for (int j = 0; j < matrix[i].length; j++)
      System.out.print( matrix[i][j] + " " );
   System.out.println();
}
Utwórz tablicę
Wypełnij tablicę wartościami


Zewnętrzna pętla, która iteruje po wierszach tablicy.
Wewnętrzna pętla, która iteruje po komórkach pojedynczego wiersza.

„Jak widać, potrzebujemy dwóch zagnieżdżonych pętli. Pierwszą nazywamy zewnętrzną, a drugą — wewnętrzną .

„W zewnętrznej pętli ( izmiennej) kolejno przechodzimy przez wszystkie wiersze (tablice), które składają się na naszą dwuwymiarową tablicę. Każda wartość odpowiada iwierszowi o tym indeksie.

„W pętli wewnętrznej ( jzmiennej) iterujemy po wszystkich komórkach w wierszach. Dzięki pętli wewnętrznej na ekranie zostanie wyświetlony wiersz, który składa się z wartości jednej jednowymiarowej tablicy.

„Oto, co zostanie wyświetlone:

Przetwarzany jest jeden wiersz tablicy 1 2 3 4 5 6
Przetwarzane są dwa wiersze tablicy 1 2 3 4 5 6
1 2 3
Przetwarzane są trzy wiersze tablicy 1 2 3 4 5 6
1 2 3
1

Tablice wielowymiarowe

„Amigo! Zgadłeś, że skoro istnieją tablice dwuwymiarowe, to mogą być też trójwymiarowe?

- Właśnie o tym myślałem, ale wstydziłem się zapytać.

„Tak, można utworzyć tablicę trójwymiarową i ogólnie tablicę dowolnego wymiaru. Takie tablice nazywane są „wielowymiarowymi”. Dla zabawy stwórzmy tablicę wielowymiarową, która ma 4 wymiary.

int[][][][] matrix = new int[2][3][4][5];

— To nie wydaje się trudne!

„Jeszcze nie próbowałeś utworzyć go ręcznie! Naciesz oczy tym:

int[][][][] matrix;
matrix = new int[2][][][];                   // Create a 2-element array of references to references to references
for (int i = 0; i < matrix.length; i++)
{
  matrix[i] = new int[3][][];                // Create a 3-element array of references to references
  for (j = 0; j < matrix[i].length; j++)
  {
    matrix[i][j] = new int[4][];             // Create a 4-element array of references
    for (k = 0; k < matrix[i][j].length; k++)
      matrix[i][j][k] = new int[5];          // Create 5-element arrays of integers
  }
}

„A to jest po prostu tworzenie tablicy! Potem trzeba też jakoś z nią pracować”.

„Cofam to, co powiedziałem. Nie jest łatwo z nimi pracować. Ale jest to możliwe”.

„Skoro jest to możliwe, oto dodatkowe zadanie. Napisz kod, który wyświetla wszystkie wartości w trójwymiarowej tablicy. Wiesz wystarczająco dużo, aby to zrobić. Najważniejsze jest, aby być cierpliwym i uważnym. wiedzy, która pomoże ci rozwiązać to zadanie w jednym wierszu). Ale nieważne, jak to rozwiążesz, rozwiąż to”.

„Dziękuję, Rishi. Spróbuję”.