1. Jagged arrays

Som Java-programmerer kan du ikke bare bytte rader i en todimensjonal matrise, men også konstruere en matrise slik du vil.

La oss si at du vil at den første raden i en todimensjonal matrise skal ha en lengde på 10, og du vil at lengden på den andre raden skal være 50. Kan vi gjøre det? Ja vi kan.

Først må vi lage en "beholder med containere" - dette er den første matrisen, som vil lagre referanser til matriser med rader. Slik gjøres det:

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

Du utelater ganske enkelt den andre dimensjonen , og Java-maskinen lager en container med containere. Dette er hva som vil være i minnet etter å ha utført denne koden:

Jagged arrays i Java

Og vel, du vet allerede hvordan du lager endimensjonale arrays 🙂

Slik vil den resulterende koden se ut:

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

Den nullte raden er en matrise av 10elementer
Den første raden er en matrise med 50elementer

Vi har nettopp laget en såkalt " tjaget array ".

Og hvis vi nå ønsker å vise alle elementene i denne arrayen på skjermen, så vil arrayens lengthegenskap komme godt med: tross alt er lengdene på arrayens rader forskjellige.

Hvordan finner du forresten lengden på en 'container med containere' i vårt eksempel? Det er også et array-objekt, som betyr at det har en lengde. Det riktige svaret er matrix.length.

Hva med matrisene som utgjør radene våre?matrix[0].length



2. Arbeide med en todimensjonal matrise

Anta at du vil vise en todimensjonal matrise. Hvordan gjør du det?

Koden vår vil se omtrent slik ut:

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();
}
Lag en matrise
Fyll matrisen med verdier


Ytre løkke som itererer over radene i matrisen.
Indre løkke som itererer over cellene i en enkelt rad.

Du trenger to nestede løkker. Den første kaller vi ytre , og den andre - indre .

I den ytre sløyfen ( ivariabelen) går vi sekvensielt gjennom alle radene (matrisene) som utgjør vår todimensjonale matrise. Hver verdi av itilsvarer en rad med den indeksen.

I den indre løkken ( jvariabelen) itererer vi over alle cellene i radene. Takket være den indre løkken vil en rad, som består av verdiene til en endimensjonal matrise, vises på skjermen.

Dette er hva som vises:

Én rad i matrisen behandles
1 2 3 4 5 6
To rader av matrisen behandles
1 2 3 4 5 6
1 2 3
Tre rader av matrisen behandles
1 2 3 4 5 6
1 2 3
1


3. Flerdimensjonale arrays

Et annet interessant faktum om arrays, en som du sikkert allerede har gjettet. Hvis du kan lage en todimensjonal matrise, kan du da lage en tredimensjonal matrise?

Ja, du kan lage en rekke av alle dimensjoner. Slike matriser kalles "flerdimensjonale".

Bare for moro skyld, la oss lage en flerdimensjonal matrise som har 4 dimensjoner.

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

Denne koden er for enkel, ikke sant?

Hva om du lager 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 å lage matrisen! Da må du også jobbe med det på en eller annen måte.

Bonusoppgave: skriv kode som viser alle verdiene i en tredimensjonal matrise.