„Hallo, mein allerklügster Schüler!“

„Hallo, Rishi!“

„Sehnen Sie sich nach einer neuen Diskussion über Arrays? Nun, heute haben wir eine für Sie! Heute werde ich Ihnen etwas über gezackte und mehrdimensionale Arrays erzählen.“

„Klingt blutrünstig und beängstigend.“

„Keine Sorge, ein echter Programmierer kann immer mit einem Array umgehen, auch wenn er seine Zähne fletscht. Scherz beiseite, die Zackenhaftigkeit eines Arrays spiegelt nicht nur die Fähigkeit wider, die Zeilen eines zweidimensionalen Arrays auszutauschen, sondern auch ein Array zu konstruieren.“ aber es muss sein.

„Angenommen, Sie möchten, dass die erste Zeile eines zweidimensionalen Arrays eine Länge von 10 hat und die zweite 50.“

„Können Sie das wirklich tun?“

„Absolut! Zuerst erstellen wir einen ‚Container von Containern‘ – dies ist das erste Array, das Referenzen auf Arrays von Zeilen speichert. So wird es gemacht:

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

„Sie lassen einfach die zweite Dimension weg und die Java-Maschine erstellt einen Container mit Containern. Folgendes wird nach der Ausführung dieses Codes im Speicher sein:

„Und, nun ja, Sie wissen bereits, wie man eindimensionale Arrays erstellt 🙂

So sieht der resultierende Code aus:

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

Die nullte Zeile ist ein Array von 10Elementen.
Die erste Zeile ist ein Array von 50Elementen

„Wir haben gerade ein sogenanntes „gezacktes“ Array erstellt. Seine Kanten sind rau und unregelmäßig.

„Und wenn wir nun alle Elemente dieses Arrays auf dem Bildschirm anzeigen wollen, dann lengthist das Array des Arrays praktisch: Schließlich sind die Längen der Zeilen des Arrays unterschiedlich.“

„Können Sie mir übrigens sagen, wie ich die Länge eines ‚Containers‘ in unserem Beispiel ermitteln kann? Es ist auch ein Array-Objekt, was bedeutet, dass es eine Länge hat.“

„Wahrscheinlich matrix.length?“

„Ganz richtig! Und für die Arrays, die die Zeilen bilden, würden wir sie matrix[0].lengthfür die nullte Zeile verwenden.“

„Und zum ersten Mal heißt das, dass wir verwenden würden matrix[1].length?“

„Ganz richtig. Im ersten Fall ergibt die Ausführung des Befehls 10, im zweiten Fall ist das Ergebnis 50.

Arbeiten mit einem zweidimensionalen Array

„Jetzt versuchen wir, ein zweidimensionales Array anzuzeigen:

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();
}
Erstellen Sie ein Array.
Füllen Sie das Array mit Werten.


Äußere Schleife, die über die Zeilen des Arrays iteriert.
Innere Schleife, die die Zellen einer einzelnen Zeile durchläuft.

„Wie Sie sehen, brauchen wir zwei verschachtelte Schleifen. Die erste nennen wir „outer“ und die zweite „ inner“ .

„In der äußeren Schleife (der iVariablen) durchlaufen wir nacheinander alle Zeilen (Arrays), aus denen unser zweidimensionales Array besteht. Jeder Wert von ientspricht einer Zeile mit diesem Index.

„In der inneren Schleife (der jVariablen) iterieren wir über alle Zellen in den Zeilen. Dank der inneren Schleife wird eine Zeile, die aus den Werten eines eindimensionalen Arrays besteht, auf dem Bildschirm angezeigt.

„Das wird angezeigt:

Eine Zeile des Arrays wird verarbeitet 1 2 3 4 5 6
Zwei Zeilen des Arrays werden verarbeitet 1 2 3 4 5 6
1 2 3
Drei Zeilen des Arrays werden verarbeitet 1 2 3 4 5 6
1 2 3
1

Mehrdimensionale Arrays

„Amigo! Wussten Sie, dass es, wenn es zweidimensionale Arrays gibt, auch dreidimensionale geben kann?“

„Ich habe gerade darüber nachgedacht, aber es war mir peinlich zu fragen.

„Ja, Sie können ein dreidimensionales Array erstellen, und im Allgemeinen ein Array mit jeder Dimension. Solche Arrays werden „multidimensional“ genannt. Nur zum Spaß erstellen wir ein mehrdimensionales Array mit vier Dimensionen.

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

„Das scheint nicht sehr schwierig zu sein!“

„Sie haben noch nicht versucht, eines manuell zu erstellen! Sehen Sie sich Folgendes an:

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

„Und das ist nur das Erstellen eines Arrays! Dann muss man auch irgendwie damit arbeiten.“

„Ich nehme zurück, was ich gesagt habe. Es ist nicht so einfach, mit ihnen zu arbeiten. Aber es ist möglich.“

„Da es möglich ist, ist hier eine Bonusaufgabe. Schreiben Sie Code, der alle Werte in einem dreidimensionalen Array anzeigt. Sie wissen genug, um dies zu tun. Die Hauptsache ist, geduldig und aufmerksam zu sein. Oder vielleicht einfallsreich (es gibt ein Geheimnis). Wissen, das Ihnen hilft, diese Aufgabe in einer einzigen Zeile zu lösen. Aber egal wie Sie es lösen, lösen Sie es.“

„Danke, Rishi. Ich werde es versuchen.“