Petlja dijagonalno kroz 2d Java niz

1. Pregled

U ovom uputstvu vidjet ćemo kako se dijagonalno petljati kroz dvodimenzionalni niz. Rješenje koje pružamo može se koristiti za kvadratni dvodimenzionalni niz bilo koje veličine.

2. Dvodimenzionalni niz

Ključ u radu s elementima niza je znati kako iz tog polja dobiti određeni element. Za dvodimenzionalni niz koristimo indekse redaka i stupaca da bismo dobili elemente niza. Za ovaj ćemo problem upotrijebiti sljedeći dijagram kako bismo pokazali kako doći do ovih elemenata.

Dalje, moramo shvatiti koliko dijagonalnih linija imamo u svom nizu, kao što se vidi na dijagramu. To činimo tako da prvo dobijemo duljinu jedne dimenzije niza, a zatim pomoću nje dobijemo broj dijagonalnih linija (diagonalLines).

Zatim koristimo broj dijagonalnih linija da bismo dobili srednju točku koja će pomoći u pretraživanju indeksa redaka i stupaca.

U ovom primjeru srednja točka je tri:

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

3. Dobivanje indeksa redova i stupaca

Za petlju kroz čitav niz započinjemo petlju od 1 dok varijabla petlje nije manja ili jednaka diagonalLines varijabilna.

for (int i = 1; i <= diagonalLines; i ++) {// neke operacije}

Uvedimo i ideju broja predmeta u dijagonalnoj liniji, nazvavši je itemsInDiagonal. Na primjer, redak 3 na gornjem dijagramu ima 3 stavke (g, e, c), a redak 2 ima 2 (h, f). Ova se varijabla uvećava za 1 u varijabli loop if loop ja je manje ili jednako midPoint. Zatim se umanjuje za 1 inače.

Nakon povećanja ili smanjenja itemsInDiagonal, tada imamo novu petlju s varijablom petlje j. Promjenjiva j se povećava od 0 do manje od itemsInDiagonal.

Zatim koristimo varijable petlje ja i j kako bi dobili indekse redaka i stupaca. Logika ovog izračuna ovisi o tome je li varijabla petlje ja je veći od midPointili ne. Kada ja je veći od midPoint, mi također koristimo duljina varijabla za određivanje indeksa redaka i stupaca:

int rowIndex; int columnIndex; if (i <= midPoint) {itemsInDiagonal ++; za (int j = 0; j <itemsInDiagonal; j ++) {rowIndex = (i - j) - 1; indeks stupca = j; items.append (twoDArray [rowIndex] [columnIndex]); }} else {itemsInDiagonal--; za (int j = 0; j <itemsInDiagonal; j ++) {rowIndex = (dužina - 1) - j; columnIndex = (i - duljina) + j; items.append (twoDArray [rowIndex] [columnIndex]); }}

4. Zaključak

U ovom uputstvu pokazali smo kako se dijagonalno petljati kroz kvadratni dvodimenzionalni niz pomoću metode koja pomaže u dobivanju indeksa redaka i stupaca.

Kao i uvijek, puni izvorni kod primjera dostupan je na GitHub-u.