Java nyelvben egy tömb elemeit 1 index-szel elcsúsztatni?
Bocs, akkor leírom érthetőbben, konkrétan a feladatot.
Van egy 4 x 4 -es táblám (swing segítségével grafikus felülettel, gombokkal feltöltve stb, de a lényeg, hogy egy mátrix), amin elhelyezek kezdetben véletlenszerűen 4 fekete (X) és 4 fehér (Y) "kavicsot" (a gombok szövege X és Y lesz adott helyen). A lényeg, hogy 2 játékos van, értelemszerűen az egyiké az X kavicsok, a másiké az Y kavicsok. A játék lényege, hogy a saját kavicsodat a saját körödben tudod mozgatni 1 mezőt vízszintesen vagy függőlegesen, majd utána a másik játékos jön, ő ugyanezt teheti a saját "kavicsaival". A cél, hogy "lelökd" az ellenfél kavicsait a pályáról, majd adott lépésszámon belül véget ér a játék, majd kiírja a nyertest (akinek több kavicsa maradt a táblán). A lelökés úgy működik, mint a való életben, tehát ha a te kavicsod mögött közvetlenül áll valamennyi kavics, azok ugyanúgy tolódnak, ha pedig a legszélén is van, az "leesik".
Remélem így érthetőbb.
Ehhez egy sima ciklus eleg, nem?
Megkeresed az elem indexet, mondjuk 3, aztan pedig ciklussal i=3-tol, amig utolsi elotti elemig ersz, eltolod.
Forditva talan egyszerubb(nem java, hanem js koddal, de amennyire tudom abban is hasonlo
n = tomb.length;
index = tomb.indexOf('x');
for(i = n - 2; i > index; i--) {
tomb[i] = tomb[i + 1];
}
#3 Kivéve hogy a mozgatás mind a négy irányba történhet, és hogy csak az első 'none' mezőig kell tolódniuk. Plusz a ciklusod úgy rossz, ahogy van, lévén nem vetted figyelembe a felülírás sorrendjét (ugyanazt az elemet fogod végigrakni az egész tömbben).
Meg lehet ezt a problémát oldani úgy, hogy az egyszerűen felfogható, ám picit memória-, és műveletigényesebb legyen, és meg lehet oldani egy picit komplikáltabban is, de cserébe szebben, hatékonyabban. Most elmondom az egyszerű megközelítést:
Az egyszerű megközelítés lényege, hogy nem az eredeti sort/oszlopot írod felül, hanem egy lokálisan létrehozott tömbbe számítod ki az adott sor új elrendezkedését, és utána ezt felmásolod az eredeti sor helyére. Ezesetben semmi más dolgod nincs, mint meghatározni, hogy vízszintesen, vagy függőlegesen tolod el a kavicsot, ennek függvényében egy sort, vagy oszlopot kell majd bejárnod, majd a tolás iránya alapján elölről, vagy hátulról végigmenni rajta, a megadott indexig egyszerűen felmásolva a lokális tömbbe az értékeket, majd ha elérsz a megadott indexig, onnantól az eggyel utána következő indexre pakolod fel az értékeket a lokális tömbben. Ezután a tömb értékét visszamásolod az eredeti sorba. A komplexebb emgvalósítás helyben írná felül a mátrixot, viszont ekkor arra is oda kell figyelni, hogy az értékek milyen sorrendben kerülnek felülírásra, ha az értékeket ugyanabban az irányban másolod, amilyen irányba haladsz (tehát pl balról jobbra haladsz, és a baloldali elemről másolsz a jobboldalira (tomb[i] = tomb[i-1]), akkor a legelső elemet fogod végigpakolni az egész tömbön.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!