"Bună, cel mai deștept elev al meu!"

— Bună, Rishi!

"Tânjiți după o nouă discuție despre matrice? Ei bine, astăzi avem una pentru tine! Astăzi o să vă povestesc despre matrice zimțate și multidimensionale."

— Sună însetat de sânge și înfricoșător.

„Nu vă faceți griji, un programator real poate întotdeauna să se ocupe de o matrice, chiar și atunci când își dezvăluie dinții. Lăsând la o parte glumele, caracterul zimțat al unei matrice reflectă capacitatea nu numai de a schimba rândurile unei matrice bidimensionale, ci și de a construi o matrice. oricum trebuie să fie.

„Să presupunem că doriți ca primul rând al unui tablou bidimensional să aibă o lungime de 10, iar al doilea să fie de 50”.

— Chiar poți să faci asta?

„Absolut! În primul rând, creăm un „container de containere” - acesta este primul tablou, care va stoca referințe la matrice de rânduri. Iată cum se face:

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

„Pur și simplu omiteți a doua dimensiune , iar mașina Java creează un container de containere. Acesta este ceea ce va fi în memorie după executarea acestui cod:

„Și, bine, știți deja cum să creați tablouri unidimensionale 🙂

Iată cum va arăta codul rezultat:

// Matrix of important data
int[][] matrix = new int[2][];
matrix[0] = new int[10];
matrix[1] = new int[50]
Matrice bidimensională

Rândul zero este o matrice de 10elemente
Primul rând este o matrice de 50elemente

„Tocmai am creat o așa-numită matrice „jagged” . Marginile sale sunt aspre și neregulate.

„Și dacă acum vrem să afișăm toate elementele acestei matrice pe ecran, atunci matricea matricei lengthva fi utilă: la urma urmei, lungimile rândurilor matricei sunt diferite.

„Apropo, poți să-mi spui cum să găsesc lungimea unui „container de containere” în exemplul nostru? Este, de asemenea, un obiect matrice, ceea ce înseamnă că are o lungime.”

"Probabil matrix.length?"

"Fără dreptate! Și pentru matricele care formează rândurile, am folosi matrix[0].lengthpentru rândul zero."

"Și pentru prima, asta înseamnă că am folosi matrix[1].length?"

„Destul de corect. În primul caz, executarea comenzii va da 10, iar în al doilea caz, rezultatul va fi 50.

Lucrul cu o matrice bidimensională

„Acum să încercăm să afișăm o matrice bidimensională:

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();
}
Creați o matrice
Umpleți matricea cu valori


Bucla exterioară care iterează peste rândurile matricei.
Bucla interioară care iterează peste celulele unui singur rând.

„După cum puteți vedea, avem nevoie de două bucle imbricate. Pe prima o numim exterioară, iar pe a doua – interioară .

„În bucla exterioară ( ivariabila), parcurgem secvențial toate rândurile (matricele) care alcătuiesc matricea noastră bidimensională. Fiecare valoare a icorespunde unui rând cu acel indice.

„În bucla interioară ( jvariabila), iterăm peste toate celulele din rânduri. Datorită buclei interioare, un rând, care constă din valorile unui tablou unidimensional, va fi afișat pe ecran.

„Iată ce va fi afișat:

O linie a matricei este procesată 1 2 3 4 5 6
Două linii ale matricei sunt procesate 1 2 3 4 5 6
1 2 3
Sunt procesate trei linii ale matricei 1 2 3 4 5 6
1 2 3
1

Matrice multidimensionale

„Amigo! Ai ghicit că dacă există matrice bidimensionale, atunci pot fi și tridimensionale?

„Tocmai mă gândeam la asta, dar mi-a fost rușine să întreb.

„Da, puteți crea o matrice tridimensională și, în general, o matrice de orice dimensiune. Astfel de matrice sunt numite „multidimensionale”. Doar pentru distracție, să creăm o matrice multidimensională care are 4 dimensiuni.

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

— Nu pare foarte greu!

„Nu ați încercat încă să creați unul manual! Iată, bucurați-vă ochii cu asta:

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
  }
}

„Și asta înseamnă doar crearea unei matrice! Apoi, de asemenea, trebuie să lucrezi cu ea cumva.”

"Retrag ceea ce am spus. Nu este atât de ușor să lucrezi cu ei. Dar este posibil."

„Din moment ce este posibil, iată o sarcină bonus. Scrieți cod care să afișeze toate valorile într-o matrice tridimensională. Știți destule pentru a face acest lucru. Principalul lucru este să aveți răbdare și atenție. Sau poate să fiți plini de resurse (există un pic secret de cunoștințe care vă vor ajuta să rezolvați această sarcină într-o singură linie). Dar indiferent cum o rezolvați, rezolvați-o."

"Mulțumesc, Rishi. O să încerc."