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.