1. Matrice zimțate

Ca programator Java, nu numai că puteți schimba rândurile unei matrice bidimensionale, ci și să construiți o matrice după cum doriți.

Să presupunem că doriți ca primul rând al unui tablou bidimensional să aibă lungimea de 10, și doriți ca lungimea celui de-al doilea rând să fie 50. putem face asta? Da putem.

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

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

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

Matrice zimțate în Java

Ș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 așa-numita „ matrice zimțată ”.

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

Apropo, cum găsiți lungimea unui „container de containere” în exemplul nostru? Este, de asemenea, un obiect matrice, ceea ce înseamnă că are o lungime. Răspunsul corect este matrix.length.

Ce zici de matricele care cuprind rândurile noastre?matrix[0].length



2. Lucrul cu o matrice bidimensională

Să presupunem că doriți să afișați o matrice bidimensională. Cum faci asta?

Codul nostru va arăta cam așa:

int[][] matrix = new int[3][];
matrix[0] = new int[]{1, 2, 3, 4, 5, 6};
matrix[1] = new int[]{1, 2, 3};
matrix[2] = new int[]{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.

Aveți nevoie de două bucle imbricate. Pe primul îl numim exterior , iar pe al doilea - interior .

În bucla exterioară ( ivariabila), trecem secvenţial prin 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, pe ecran va fi afișat un rând, care constă din valorile unui tablou unidimensional.

Iată ce va fi afișat:

Un rând al matricei este procesat
1 2 3 4 5 6
Sunt procesate două rânduri ale matricei
1 2 3 4 5 6
1 2 3
Sunt procesate trei rânduri ale matricei
1 2 3 4 5 6
1 2 3
1


3. Matrice multidimensionale

Încă un fapt interesant despre matrice, unul pe care probabil l-ați ghicit deja. Dacă puteți face o matrice bidimensională, atunci puteți face o matrice tridimensională?

Da, puteți crea 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];

Acest cod este prea simplu, nu-i așa?

Ce se întâmplă dacă îl creați manual?

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 matricei! Atunci trebuie să lucrezi cu el cumva.

Sarcină bonus: scrieți codul care afișează toate valorile într-o matrice tridimensională.