Átlósan körbevezet egy 2d Java tömbön keresztül

1. Áttekintés

Ebben az oktatóanyagban megtudhatjuk, hogyan lehet átlósan hurkolni egy kétdimenziós tömbön. Az általunk nyújtott megoldás bármilyen méretű négyzet alakú kétdimenziós tömbhöz használható.

2. Kétdimenziós tömb

A tömb elemeivel való munkavégzés kulcsa annak ismerete, hogy miként nyerhetünk egy adott elemet a tömbből. Kétdimenziós tömb esetén sor- és oszlopindexeket használunk egy tömb elemeinek megszerzéséhez. Ehhez a problémához a következő diagram segítségével mutatjuk be, hogyan lehet ezeket az elemeket megszerezni.

Ezután meg kell értenünk, hogy hány átlós vonal van a tömbben, amint az a diagramon látható. Ezt úgy tesszük meg, hogy előbb megkapjuk a tömb egyik dimenziójának hosszát, majd ezt használjuk az átlós vonalak számának megszerzéséhez (diagonalLines).

Ezután az átlós vonalak számával megkapjuk a középpontot, amely segít a sor- és oszlopindexek keresésében.

Ebben a példában a középpont három:

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

3. Sor- és oszlopindexek megszerzése

A teljes tömb végighurkolásához 1-től kezdjük a ciklust, amíg a ciklusváltozó kisebb vagy egyenlő, mint a diagonalLines változó.

for (int i = 1; i <= diagonalLines; i ++) {// egyes műveletek}

Ismertessük az átlós sorban lévő tételek számának gondolatát, nevezzük azt itemsInDiagonal. Például a fenti diagram 3. sorában 3 elem szerepel (g, e, c), a 4. sorban pedig 2 (h, f). Ez a változó 1-gyel növekszik a ciklusban, amikor a ciklusváltozó én kisebb vagy egyenlő középpont. Ezután egyébként 1-gyel csökkentik.

Növekedés vagy csökkentés után itemsInDiagonal, akkor új ciklusunk van, változóval j. Változó j 0-tól növekszik, amíg kisebb lesz, mint itemsInDiagonal.

Ezután hurokváltozókat használunk én és j a sor- és oszlopindexek megszerzéséhez. A számítás logikája attól függ, hogy ciklusváltozó-e én nagyobb, mint középpontvagy nem. Mikor én nagyobb, mint középpont, mi is a hossz változó a sor- és oszlopindexek meghatározásához:

int sorIndex; int oszlopIndex; if (i <= midPoint) {itemInDiagonal ++; mert (int j = 0; j <itemInDiagonal; j ++) {rowIndex = (i - j) - 1; oszlopIndex = j; items.append (twoDArray [rowIndex] [columnIndex]); }} else {itemsInDiagonal--; for (int j = 0; j <itemInDiagonal; j ++) {rowIndex = (hossz - 1) - j; oszlopIndex = (i - hossz) + j; items.append (twoDArray [rowIndex] [columnIndex]); }}

4. Következtetés

Ebben az oktatóanyagban bemutattuk, hogyan lehet átlósan hurkolni egy négyzet alakú kétdimenziós tömböt egy olyan módszerrel, amely segít a sor- és oszlopindexek megszerzésében.

Mint mindig, a példa teljes forráskódja elérhető a GitHubon.


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