Diagonale Schleife durch ein 2D-Java-Array

1. Übersicht

In diesem Tutorial erfahren Sie, wie Sie ein zweidimensionales Array diagonal durchlaufen. Die von uns bereitgestellte Lösung kann für ein quadratisches zweidimensionales Array beliebiger Größe verwendet werden.

2. Zweidimensionales Array

Der Schlüssel zum Arbeiten mit Elementen eines Arrays besteht darin, zu wissen, wie ein bestimmtes Element aus diesem Array abgerufen wird. Für ein zweidimensionales Array verwenden wir Zeilen- und Spaltenindizes, um Elemente eines Arrays abzurufen. Für dieses Problem verwenden wir das folgende Diagramm, um zu zeigen, wie diese Elemente abgerufen werden.

Als nächstes müssen wir verstehen, wie viele diagonale Linien wir in unserem Array haben, wie im Diagramm gezeigt. Dazu ermitteln wir zunächst die Länge einer Dimension des Arrays und anschließend die Anzahl der diagonalen Linien ( diagonalLines ) .

Wir verwenden dann die Anzahl der diagonalen Linien, um den Mittelpunkt zu erhalten, der bei der Suche nach Zeilen- und Spaltenindizes hilfreich ist.

In diesem Beispiel ist der Mittelpunkt drei:

int length = twoDArray.length int diagonalLines = (length + length) - 1 int midPoint = (diagonalLines / 2) + 1

3. Abrufen von Zeilen- und Spaltenindizes

Um das gesamte Array zu durchlaufen, beginnen wir mit der Schleife von 1 bis die Schleifenvariable kleiner oder gleich der diagonalLines- Variablen ist.

for (int i = 1; i <= diagonalLines; i++) { // some operations }

Lassen Sie uns auch die Idee der Anzahl der Elemente in einer diagonalen Linie vorstellen , die als itemsInDiagonal bezeichnet wird . Zum Beispiel hat Zeile 3 im obigen Diagramm 3 Elemente (g, e, c) und Zeile 4 hat 2 (h, f). Diese Variable wird in der Schleife um 1 erhöht, wenn die Schleifenvariable i kleiner oder gleich midPoint ist . Andernfalls wird es um 1 dekrementiert.

Nach dem Inkrementieren oder Dekrementieren von itemsInDiagonal haben wir dann eine neue Schleife mit der Schleifenvariablen j . Die Variable j wird von 0 inkrementiert, bis sie kleiner als itemsInDiagonal ist.

Wir verwenden dann die Schleifenvariablen i und j , um die Zeilen- und Spaltenindizes zu erhalten. Die Logik dieser Berechnung hängt davon ab, ob die Schleifenvariable i größer als midPoint istoder nicht. Wenn i grßer als ist Midpoint , verwenden wir auch die Länge variabel die Zeilen- und Spaltenindizes , um zu bestimmen:

int rowIndex; int columnIndex; if (i <= midPoint) { itemsInDiagonal++; for (int j = 0; j < itemsInDiagonal; j++) { rowIndex = (i - j) - 1; columnIndex = j; items.append(twoDArray[rowIndex][columnIndex]); } } else { itemsInDiagonal--; for (int j = 0; j < itemsInDiagonal; j++) { rowIndex = (length - 1) - j; columnIndex = (i - length) + j; items.append(twoDArray[rowIndex][columnIndex]); } }

4. Fazit

In diesem Tutorial haben wir gezeigt, wie Sie mit einer Methode, die beim Abrufen von Zeilen- und Spaltenindizes hilft, diagonal durch ein quadratisches zweidimensionales Array laufen.

Wie immer ist der vollständige Quellcode des Beispiels auf GitHub verfügbar.