1. Jagged arrays

Som Java-programmør kan du ikke kun bytte rækkerne i et todimensionelt array, men også konstruere et array, som du vil.

Lad os sige, at du ønsker, at den første række i en todimensional matrix skal have en længde på 10, og du ønsker, at længden af ​​den anden række skal være 50. Kan vi gøre det? Ja vi kan.

Først skal vi oprette 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 med containere. Dette er, hvad der vil være i hukommelsen efter udførelse af denne kode:

Jagged arrays i Java

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 netop oprettet et såkaldt " ravset array ".

Og hvis vi nu vil vise alle elementerne i dette array på skærmen, så vil arrayets lengthegenskab komme godt med: Længden af ​​arrayets rækker er trods alt forskellige.

Hvordan finder du i øvrigt længden af ​​en 'container med containere' i vores eksempel? Det er også et array-objekt, hvilket betyder, at det har en længde. Det rigtige svar er matrix.length.

Hvad med de arrays, der udgør vores rækker?matrix[0].length



2. Arbejde med et todimensionelt array

Antag, at du vil vise et todimensionalt array. Hvordan gør du det?

Vores kode vil se sådan ud:

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();
}
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.

Du skal bruge 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 sløjfe 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 række af arrayet behandles
1 2 3 4 5 6
To rækker af arrayet behandles
1 2 3 4 5 6
1 2 3
Tre rækker af arrayet behandles
1 2 3 4 5 6
1 2 3
1


3. Multidimensionelle arrays

Endnu en interessant kendsgerning om arrays, en som du sikkert allerede har gættet. Hvis du kan lave et todimensionelt array, kan du så lave et tredimensionelt array?

Ja, du kan oprette en række af enhver dimension. Sådanne arrays kaldes 'flerdimensionelle'.

Lad os bare for sjovs skyld skabe et multidimensionelt array, der har 4 dimensioner.

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

Denne kode er for simpel, ikke?

Hvad hvis du opretter det manuelt?

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 arrayet! Så skal du også arbejde med det på en eller anden måde.

Bonusopgave: skriv kode, der viser alle værdierne i et tredimensionelt array.