Looping Diagonally Through a 2d Java Array

1. Oversikt

I denne opplæringen vil vi se hvordan du kan løpe diagonalt gjennom et todimensjonalt utvalg. Løsningen vi tilbyr, kan brukes til et firkantet todimensjonalt utvalg av alle størrelser.

2. To-dimensjonal matrise

Nøkkelen til å jobbe med elementer i en matrise er å vite hvordan man får tak i et bestemt element fra den matrisen. For en todimensjonal matrise bruker vi rad- og kolonneindekser for å få elementer i en matrise. For dette problemet bruker vi følgende diagram for å vise hvordan du får disse elementene.

Deretter må vi forstå hvor mange diagonale linjer vi har i vårt utvalg, som vist i diagrammet. Vi gjør dette ved først å få lengden på en dimensjon i matrisen og deretter bruke den til å få antall diagonale linjer (diagonalLines).

Vi bruker deretter antall diagonale linjer for å få midtpunktet som vil hjelpe i søket etter rad- og kolonneindekser.

I dette eksemplet er midtpunktet tre:

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

3. Få rad- og kolonneindekser

For å gå gjennom hele matrisen, begynner vi å løkke fra 1 til løkkevariabelen er mindre enn eller lik diagonalLines variabel.

for (int i = 1; i <= diagonalLines; i ++) {// noen operasjoner}

La oss også introdusere ideen om antall elementer i en diagonal linje, kalle det itemsInDiagonal. For eksempel har linje 3 i diagrammet over 3 elementer (g, e, c) og linje 4 har 2 (h, f). Denne variabelen økes med 1 i løkken når løkkevariabelen Jeg er mindre eller lik midPoint. Den blir deretter redusert med 1 ellers.

Etter økning eller dekrementering elementerInDiagonal, vi har da en ny sløyfe med løkkevariabel j. Variabel j økes fra 0 til den er mindre enn itemsInDiagonal.

Vi bruker deretter løkkevariabler Jeg og j for å få rad- og kolonneindeksene. Logikken til denne beregningen avhenger av om løkkevariabler Jeg er større enn midPointeller ikke. Når Jeg er større enn midPoint, bruker vi også lengde variabel for å bestemme rad- og kolonneindeksene:

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

4. Konklusjon

I denne opplæringen har vi vist hvordan du kan løpe diagonalt gjennom et firkantet todimensjonalt array ved hjelp av en metode som hjelper til med å få rad- og kolonneindekser.

Som alltid er hele kildekoden til eksemplet tilgjengelig på GitHub.


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