"Hej, min allerklogeste elev!"

"Hej, Rishi!"

"Hænger du efter en ny diskussion om arrays? Nå, i dag har vi en til dig! I dag vil jeg fortælle dig om takkede og multidimensionelle arrays."

"Lyder blodtørstig og skræmmende."

"Bare rolig, en rigtig programmør kan altid håndtere et array, selv når den blotter sine tænder. Spøg til side, et arrays forrevne afspejler evnen til ikke kun at ombytte rækkerne i et todimensionelt array, men også at konstruere et array hvordan det dog skal være.

"Lad os sige, at du ønsker, at den første række i et todimensionelt array skal have en længde på 10, og at den anden række skal være 50."

"Kan du virkelig gøre det?"

"Absolut! Først opretter vi en 'container af containere' - dette er det første array, som vil gemme referencer til arrays af rækker. Sådan gøres det:

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

"Du udelader simpelthen den anden dimension , og Java-maskinen opretter en container af containere. Dette er, hvad der vil være i hukommelsen efter at have udført denne kode:

"Og godt, du ved allerede, hvordan man opretter endimensionelle arrays 🙂

Sådan ser den resulterende kode ud:

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

Den nulte række er en matrix af 10elementer
Den første række er en matrix af 50elementer

"Vi har lige skabt et såkaldt "jagged" array. Dets kanter er ru og uregelmæssige.

"Og hvis vi nu vil vise alle elementerne i dette array på skærmen, så vil arrayets lengtharray komme til nytte: når alt kommer til alt, er længderne af arrayets rækker forskellige.

"Kan du i øvrigt fortælle mig, hvordan man finder længden af ​​en 'container med containere' i vores eksempel? Det er også et array-objekt, hvilket betyder, at det har en længde."

"Sandsynligvis matrix.length?"

"Helt rigtigt! Og for de arrays, der danner rækkerne, ville vi bruge matrix[0].lengthtil den nulte række."

"Og for det første betyder det, at vi ville bruge matrix[1].length?"

"Helt rigtigt. I det første tilfælde vil udførelse af kommandoen give 10, og i det andet tilfælde vil resultatet være 50.

Arbejde med et todimensionelt array

"Lad os nu prøve at vise et todimensionelt array:

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();
}
Opret et array
Fyld arrayet med værdier


Ydre sløjfe, der itererer over rækkerne i arrayet.
Indre sløjfe, der itererer over cellerne i en enkelt række.

"Som du kan se, har vi brug for to indlejrede løkker. Den første kalder vi ydre, og den anden - indre .

"I den ydre løkke ( ivariablen) gennemgår vi sekventielt alle de rækker (arrays), der udgør vores todimensionelle array. Hver værdi af isvarer til en række med det indeks.

"I den indre løkke ( jvariablen) itererer vi over alle cellerne i rækkerne. Takket være den indre løkke vil en række, som består af værdierne af et endimensionelt array, blive vist på skærmen.

"Dette er, hvad der vil blive vist:

En linje i arrayet behandles 1 2 3 4 5 6
To linjer i arrayet behandles 1 2 3 4 5 6
1 2 3
Tre linjer i arrayet behandles 1 2 3 4 5 6
1 2 3
1

Multidimensionelle arrays

"Amigo! Gættede du, at hvis der er todimensionelle arrays, så kan der også være tredimensionelle?

"Jeg tænkte lige på det, men var flov over at spørge.

"Ja, du kan skabe et tredimensionelt array, og generelt en array af enhver dimension. Sådanne arrays kaldes 'multidimensional'. Lad os bare for sjovs skyld skabe et multidimensionelt array, der har 4 dimensioner.

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

"Det virker ikke særlig svært!"

"Du har endnu ikke prøvet at oprette en manuelt! Her kan du nyde det her:

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

"Og det er bare at skabe et array! Så skal du også arbejde med det på en eller anden måde."

"Jeg tager tilbage, hvad jeg sagde. Det er ikke så nemt at arbejde med dem. Men det er muligt."

"Da det er muligt, er her en bonusopgave. Skriv kode, der viser alle værdierne i et tredimensionelt array. Du ved nok til at gøre dette. Det vigtigste er at være tålmodig og opmærksom. Eller måske være ressourcestærk (der er en hemmelig smule af viden, der vil hjælpe dig med at løse denne opgave på en enkelt linje). Men uanset hvordan du løser den, så løs den."

"Tak, Rishi. Jeg vil prøve."