Looping Diagonally Through a 2d Java Array

1. Prehľad

V tomto tutoriále uvidíme, ako sa slučkovať diagonálne cez dvojrozmerné pole. Riešenie, ktoré poskytujeme, sa dá použiť pre štvorcové dvojrozmerné pole akejkoľvek veľkosti.

2. Dvojrozmerné pole

Kľúčom pri práci s prvkami poľa je vedieť, ako získať konkrétny prvok z tohto poľa. Pre dvojrozmerné pole používame indexy riadkov a stĺpcov na získanie prvkov poľa. Pre tento problém použijeme nasledujúci diagram, ktorý ukazuje, ako získať tieto prvky.

Ďalej musíme pochopiť, koľko diagonálnych čiar máme v našom poli, ako je vidieť na diagrame. Robíme to tak, že najskôr získame dĺžku jednej dimenzie poľa a potom pomocou nej získame počet diagonálnych čiar (diagonalLines).

Potom použijeme počet diagonálnych čiar na získanie stredného bodu, ktorý pomôže pri hľadaní indexov riadkov a stĺpcov.

V tomto príklade je stredný bod tri:

int dĺžka = twoDArray.length int diagonalLines = (dĺžka + dĺžka) - 1 int midPoint = (diagonalLines / 2) + 1

3. Získanie indexov riadkov a stĺpcov

Ak chcete prechádzať celým poľom, začneme opakovať od 1, kým premenná slučky nebude menšia alebo rovná sa diagonalLines premenná.

pre (int i = 1; i <= diagonalLines; i ++) {// niektoré operácie}

Poďme si predstaviť predstavu o počte položiek v diagonálnom rade, ktorá ju volá itemsInDiagonal. Napríklad riadok 3 vo vyššie uvedenom diagrame má 3 položky (g, e, c) a riadok 4 má 2 (h, f). Táto premenná sa zvyšuje o 1 v premennej loop when loop i je menšie alebo rovné stredný bod. Inak sa potom zníži o 1.

Po zvýšení alebo znížení itemsInDiagonal, potom máme novú slučku s premennou slučky j. Variabilné j sa zvyšuje od 0, kým nie je menšia ako itemsInDiagonal.

Potom použijeme premenné slučky i a j získať indexy riadkov a stĺpcov. Logika tohto výpočtu závisí od toho, či je premenná slučky i je väčší ako stredný bodalebo nie. Kedy i je väčší ako stredný bod, používame tiež dĺžka premenná na určenie indexov riadkov a stĺpcov:

int riadokIndex; int columnIndex; if (i <= midPoint) {itemsInDiagonal ++; pre (int j = 0; j <itemsInDiagonal; j ++) {rowIndex = (i - j) - 1; columnIndex = j; items.append (twoDArray [rowIndex] [columnIndex]); }} else {itemsInDiagonal--; pre (int j = 0; j <itemsInDiagonal; j ++) {rowIndex = (dĺžka - 1) - j; columnIndex = (i - dĺžka) + j; items.append (twoDArray [rowIndex] [columnIndex]); }}

4. Záver

V tomto tutoriáli sme si ukázali, ako diagonálne prechádzať štvorcovým dvojrozmerným poľom pomocou metódy, ktorá pomáha pri získavaní indexov riadkov a stĺpcov.

Celý zdrojový kód príkladu je ako vždy k dispozícii na serveri GitHub.


$config[zx-auto] not found$config[zx-overlay] not found