Looping diagonalmente attraverso un array Java 2d

1. Panoramica

In questo tutorial, vedremo come eseguire il ciclo diagonale attraverso un array bidimensionale. La soluzione che forniamo può essere utilizzata per un array bidimensionale quadrato di qualsiasi dimensione.

2. Array bidimensionale

La chiave per lavorare con gli elementi di un array è sapere come ottenere un elemento specifico da quell'array. Per un array bidimensionale, utilizziamo indici di riga e colonna per ottenere gli elementi di un array. Per questo problema, utilizzeremo il diagramma seguente per mostrare come ottenere questi elementi.

Successivamente, dobbiamo capire quante linee diagonali abbiamo nel nostro array, come si vede nel diagramma. Lo facciamo ottenendo prima la lunghezza di una dimensione dell'array e poi usandola per ottenere il numero di linee diagonali ( diagonalLines ) .

Quindi usiamo il numero di linee diagonali per ottenere il punto medio che aiuterà nella ricerca di indici di riga e colonna.

In questo esempio, il punto medio è tre:

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

3. Ottenere gli indici di riga e di colonna

Per scorrere l'intero array, iniziamo a ripetere da 1 fino a quando la variabile di ciclo è minore o uguale alla variabile diagonalLines .

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

Introduciamo anche l'idea del numero di elementi in una linea diagonale, chiamandola itemsInDiagonal . Ad esempio, la riga 3 nel diagramma sopra ha 3 elementi (g, e, c) e la riga 4 ha 2 (h, f). Questa variabile viene incrementata di 1 nel ciclo quando la variabile del ciclo i è minore o uguale a midPoint . In caso contrario, viene decrementato di 1.

Dopo aver incrementato o decrementato itemsInDiagonal, abbiamo quindi un nuovo ciclo con la variabile di ciclo j . La variabile j viene incrementata da 0 finché non è inferiore a itemsInDiagonal.

Quindi utilizziamo le variabili di ciclo i e j per ottenere gli indici di riga e di colonna. La logica di questo calcolo dipende dal fatto che la variabile del ciclo i sia maggiore di midPointo no. Quando i è maggiore di midPoint , utilizziamo anche la variabile length per determinare gli indici di riga e colonna:

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. Conclusione

In questo tutorial, abbiamo mostrato come eseguire il ciclo diagonale attraverso un array bidimensionale quadrato utilizzando un metodo che aiuta a ottenere indici di riga e colonna.

Come sempre, il codice sorgente completo dell'esempio è disponibile su GitHub.