1. Jagged arrays

Som Java-programmerare kan du inte bara byta rader i en tvådimensionell array, utan också konstruera en array hur du vill.

Låt oss säga att du vill att den första raden i en tvådimensionell matris ska ha en längd på , 10och att du vill att längden på den andra raden ska vara 50. Kan vi göra det? Ja det kan vi.

Först måste vi skapa en "behållare med behållare" - det här är den första arrayen som kommer att lagra referenser till arrayer av rader. Så här går det till:

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

Du utelämnar helt enkelt den andra dimensionen och Java-maskinen skapar en behållare med behållare. Detta är vad som kommer att finnas i minnet efter exekvering av den här koden:

Jagged arrays i Java

Och ja, du vet redan hur man skapar endimensionella arrayer 🙂

Så här kommer den resulterande koden att se ut:

// Matrix of important data
int[][] matrix = new int[2][];
matrix[0] = new int[10];
matrix[1] = new int[50]
Tvådimensionell array

Den nollte raden är en array av 10element
Den första raden är en array av 50element

Vi har precis skapat en så kallad " taggad array ".

Och om vi nu vill visa alla element i denna array på skärmen, så kommer arrayens lengthegenskap väl till pass: trots allt är längden på arrayens rader olika.

Förresten, hur hittar du längden på en 'container med containrar' i vårt exempel? Det är också ett arrayobjekt, vilket betyder att det har en längd. Rätt svar är matrix.length.

Vad sägs om arrayerna som består av våra rader?matrix[0].length



2. Arbeta med en tvådimensionell array

Anta att du vill visa en tvådimensionell array. Hur gör man det?

Vår kod kommer att se ut ungefär så här:

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();
}
Skapa en array
Fyll arrayen med värden


Yttre loop som itererar över raderna i arrayen.
Inre loop som itererar över cellerna i en enda rad.

Du behöver två kapslade slingor. Den första kallar vi yttre , och den andra - inre .

I den yttre slingan ( ivariabeln) går vi sekventiellt igenom alla rader (arrayer) som utgör vår tvådimensionella array. Varje värde på imotsvarar en rad med det indexet.

I den inre slingan ( jvariabeln) itererar vi över alla celler i raderna. Tack vare den inre slingan kommer en rad, som består av värdena för en endimensionell array, att visas på skärmen.

Detta är vad som kommer att visas:

En rad i arrayen bearbetas
1 2 3 4 5 6
Två rader av arrayen bearbetas
1 2 3 4 5 6
1 2 3
Tre rader av arrayen bearbetas
1 2 3 4 5 6
1 2 3
1


3. Flerdimensionella arrayer

Ytterligare ett intressant faktum om arrayer, en som du förmodligen redan har gissat. Om du kan göra en tvådimensionell array, kan du då göra en tredimensionell array?

Ja, du kan skapa en array av alla dimensioner. Sådana arrayer kallas "flerdimensionella".

Bara för skojs skull, låt oss skapa en flerdimensionell array som har fyra dimensioner.

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

Den här koden är för enkel, eller hur?

Vad händer om du skapar det manuellt?

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

Och det är bara att skapa arrayen! Då behöver man också jobba med det på något sätt.

Bonusuppgift: skriv kod som visar alla värden i en tredimensionell array.