„Здравей, моят най-умен ученик!“

„Здравей, Риши!“

„Жадувате ли нова дискусия за масивите? Е, днес имаме една за вас! Днес ще ви разкажа за назъбените и многомерни масиви.“

— Звучи кръвожадно и плашещо.

„Не се притеснявайте, истинският програмист винаги може да се справи с масив, дори когато оголи зъбите си. Шегата настрана, назъбеността на масива отразява способността не само да се разменят редовете на двуизмерен масив, но и да се конструира масив обаче трябва да бъде.

„Да приемем, че искате първият ред на двуизмерен масив да има дължина 10, а вторият да е 50.“

— Наистина ли можеш да направиш това?

„Абсолютно! Първо създаваме „контейнер от контейнери“ — това е първият масив, който ще съхранява препратки към масиви от редове. Ето How се прави:

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

„Вие просто пропускате второто измерение и Java машината създава контейнер от контейнери. Ето Howво ще бъде в паметта след изпълнение на този code:

„И, добре, вече знаете How да създавате едномерни масиви 🙂

Ето How ще изглежда полученият code:

// Matrix of important data
int[][] matrix = new int[2][];
matrix[0] = new int[10];
matrix[1] = new int[50]
Двумерен масив

Нулевият ред е масив от 10елементи
Първият ред е масив от 50елементи

„Току-що създадохме така наречения „назъбен“ масив. Ръбовете му са грапави и неправилни.

„И ако сега искаме да покажем всички елементи на този масив на екрана, тогава масивът на масива lengthще ни бъде полезен: в крайна сметка дължините на редовете на масива са различни.

„Между другото, можете ли да ми кажете How да намеря дължината на „контейнер от контейнери“ в нашия пример? Той също е масивен обект, което означава, че има дължина.“

"Вероятно matrix.length?"

"Съвсем правилно! И за масивите, които образуват редовете, ще използваме matrix[0].lengthза нулевия ред."

"А за първи, това означава, че ще използваме matrix[1].length?"

„Съвсем така. В първия случай изпълнението на командата ще даде 10, а във втория случай резултатът ще бъде 50.

Работа с двумерен масив

„Сега нека се опитаме да покажем двуизмерен масив:

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();
}
Създаване на масив
Попълване на масива със стойности


Външен цикъл, който обикаля редовете на масива.
Вътрешен цикъл, който итерира клетките на един ред.

„Както можете да видите, имаме нужда от два вложени цикъла. Първия наричаме външен, а втория — вътрешен .

„Във външния цикъл (променливата i) ние последователно преминаваме през всички редове (масиви), които съставят нашия двумерен масив. Всяка стойност на iсъответства на ред с този индекс.

„Във вътрешния цикъл (променливата j) ние итерираме всички клетки в редовете. Благодарение на вътрешния цикъл на екрана ще се покаже ред, който се състои от стойностите на един едномерен масив.

„Ето Howво ще се покаже:

Обработва се един ред от масива 1 2 3 4 5 6
Обработват се два реда от масива 1 2 3 4 5 6
1 2 3
Обработват се три реда от масива 1 2 3 4 5 6
1 2 3
1

Многомерни масиви

„Амиго! Познахте ли, че щом има двуизмерни масиви, значи може да има и триизмерни?

„Тъкмо си мислех за това, но ме беше неудобно да попитам.

„Да, можете да създадете триизмерен масив и като цяло масив с произволно измерение. Такива масиви се наричат ​​„многоизмерни“. Просто за забавление, нека създадем многоизмерен масив, който има 4 измерения.

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

— Това не изглежда много трудно!

„Все още не сте опитвали да създадете такъв ръчно! Ето, насладете се на това:

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

„И това е просто създаване на масив! Тогава също трябва да работите с него по няHowъв начин.“

„Взимам обратно това, което казах. Не е толкова лесно да се работи с тях. Но е възможно.“

„Тъй като е възможно, ето една бонус задача. Напишете code, който показва всички стойности в триизмерен масив. Знаете достатъчно, за да направите това. Основното нещо е да сте търпеливи и внимателни. Или може би изобретателност (има таен бит знания, които ще ви помогнат да решите тази задача в един ред). Но Howто и да я решите, решете я."

"Благодаря ти, Риши. Ще опитам."