1. Назъбени масиви

Като Java програмист можете не само да разменяте редовете на двуизмерен масив, но и да конструирате масив, Howто искате.

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

Първо, трябва да създадем „контейнер от контейнери“ — това е първият масив, който ще съхранява препратки към масиви от редове. Така се прави:

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

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

Назъбени масиви в Java

И, добре, вече знаете 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



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

Да предположим, че искате да покажете двуизмерен масив. Как правиш това?

Нашият code ще изглежда така:

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


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

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

Във външния цикъл ( 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


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

Още един интересен факт за масивите, който вероятно вече сте се досетor. Ако можете да направите двуизмерен масив, тогава можете ли да направите триизмерен масив?

Да, можете да създадете масив с всяHowви измерения. Такива масиви се наричат ​​„многоизмерни“.

Само за забавление, нека създадем многоизмерен масив, който има 4 измерения.

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

Този code е твърде прост, нали?

Ами ако го създадете ръчно?

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, който показва всички стойности в триизмерен масив.