„Здравей, моят най-умен ученик!“
„Здравей, Риши!“
„Жадувате ли нова дискусия за масивите? Е, днес имаме една за вас! Днес ще ви разкажа за назъбените и многомерни масиви.“
— Звучи кръвожадно и плашещо.
„Не се притеснявайте, истинският програмист винаги може да се справи с масив, дори когато оголи зъбите си. Шегата настрана, назъбеността на масива отразява способността не само да се разменят редовете на двуизмерен масив, но и да се конструира масив обаче трябва да бъде.
„Да приемем, че искате първият ред на двуизмерен масив да има дължина 10, а вторият да е 50.“
— Наистина ли можеш да направиш това?
„Абсолютно! Първо създаваме „контейнер от контейнери“ — това е първият масив, който ще съхранява препратки към масиви от редове. Ето How се прави:
int[][] name = new int[height][];
„Вие просто пропускате второто измерение и Java машината създава контейнер от контейнери. Ето Howво ще бъде в паметта след изпълнение на този code:

„И, добре, вече знаете How да създавате едномерни масиви 🙂
Ето How ще изглежда полученият code:
|
Двумерен масив Нулевият ред е масив от 10 елементи Първият ред е масив от 50 елементи |
„Току-що създадохме така наречения „назъбен“ масив. Ръбовете му са грапави и неправилни.
„И ако сега искаме да покажем всички елементи на този масив на екрана, тогава масивът на масива length
ще ни бъде полезен: в крайна сметка дължините на редовете на масива са различни.
„Между другото, можете ли да ми кажете How да намеря дължината на „контейнер от контейнери“ в нашия пример? Той също е масивен обект, което означава, че има дължина.“
"Вероятно matrix.length
?"
"Съвсем правилно! И за масивите, които образуват редовете, ще използваме matrix[0].length
за нулевия ред."
"А за първи, това означава, че ще използваме matrix[1].length
?"
„Съвсем така. В първия случай изпълнението на командата ще даде 10, а във втория случай резултатът ще бъде 50.
Работа с двумерен масив
„Сега нека се опитаме да покажем двуизмерен масив:
|
Създаване на масив Попълване на масива със стойности Външен цикъл, който обикаля редовете на масива. Вътрешен цикъл, който итерира клетките на един ред. |
„Както можете да видите, имаме нужда от два вложени цикъла. Първия наричаме външен, а втория — вътрешен .
„Във външния цикъл (променливата i
) ние последователно преминаваме през всички редове (масиви), които съставят нашия двумерен масив. Всяка стойност на i
съответства на ред с този индекс.
„Във вътрешния цикъл (променливата j
) ние итерираме всички клетки в редовете. Благодарение на вътрешния цикъл на екрана ще се покаже ред, който се състои от стойностите на един едномерен масив.
„Ето Howво ще се покаже:
Обработва се един ред от масива | 1 2 3 4 5 6 |
Обработват се два реда от масива | 1 2 3 4 5 6 |
Обработват се три реда от масива | 1 2 3 4 5 6 |
Многомерни масиви
„Амиго! Познахте ли, че щом има двуизмерни масиви, значи може да има и триизмерни?
„Тъкмо си мислех за това, но ме беше неудобно да попитам.
„Да, можете да създадете триизмерен масив и като цяло масив с произволно измерение. Такива масиви се наричат „многоизмерни“. Просто за забавление, нека създадем многоизмерен масив, който има 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то и да я решите, решете я."
"Благодаря ти, Риши. Ще опитам."
GO TO FULL VERSION