Loop diagonalt gennem en 2d Java Array

1. Oversigt

I denne vejledning vil vi se, hvordan man løber diagonalt gennem et todimensionelt array. Den løsning, vi leverer, kan bruges til et firkantet todimensionelt array af enhver størrelse.

2. To-dimensionel matrix

Nøglen til at arbejde med elementer i en matrix er at vide, hvordan man får et specifikt element fra den matrix. For et todimensionelt array bruger vi række- og kolonneindeks til at få elementer i et array. Til dette problem bruger vi følgende diagram til at vise, hvordan du får disse elementer.

Dernæst skal vi forstå, hvor mange diagonale linjer vi har i vores array, som det ses i diagrammet. Vi gør dette ved først at få længden af ​​en dimension af arrayet og derefter bruge det til at få antallet af diagonale linjer (diagonalLines).

Vi bruger derefter antallet af diagonale linjer for at få midtpunktet, som hjælper med at søge efter række- og kolonneindeks.

I dette eksempel er midtpunktet tre:

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

3. Sådan får du række- og kolonneindeks

For at løkke gennem hele arrayet begynder vi at løkke fra 1, indtil loopvariablen er mindre end eller lig med diagonalLines variabel.

for (int i = 1; i <= diagonalLines; i ++) {// nogle operationer}

Lad os også introducere ideen om antallet af emner i en diagonal linje og kalde det itemsInDiagonal. For eksempel har linje 3 i diagrammet ovenfor 3 elementer (g, e, c) og linje 4 har 2 (h, f). Denne variabel er steget med 1 i loop, når loop-variabel jeg er mindre eller lig med midPoint. Derefter reduceres den med 1 ellers.

Efter forøgelse eller forringelse varerInDiagonal, vi har derefter en ny loop med loop variabel j. Variabel j øges fra 0, indtil den er mindre end itemsInDiagonal.

Vi bruger derefter loop-variabler jeg og j for at få række- og kolonneindekserne. Logikken i denne beregning afhænger af, om loop-variablen er jeg er større end midPointeller ikke. Hvornår jeg er større end midPoint, vi bruger også længde variabel til at bestemme række- og kolonneindekserne:

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]); }} andet {itemsInDiagonal--; for (int j = 0; j <itemsInDiagonal; j ++) {rowIndex = (længde - 1) - j; columnIndex = (i - længde) + j; items.append (twoDArray [rowIndex] [columnIndex]); }}

4. Konklusion

I denne vejledning har vi vist, hvordan man løber diagonalt gennem et firkantet todimensionelt array ved hjælp af en metode, der hjælper med at få række- og kolonneindeks.

Som altid er den fulde kildekode for eksemplet tilgængelig på GitHub.