Kezdőoldal » Számítástechnika » Programozás » Java nyelvben egy tömb elemeit...

Java nyelvben egy tömb elemeit 1 index-szel elcsúsztatni?

Figyelt kérdés
Van egy tömböm, példának okáért: "none" "x" "y" "x" (megj.: a "none" az ilyen semmilyen elem, üres). Egy olyan metódust kellene írnom, ami (egy konkrét indexet paraméterként megkapva) "elcsúsztatja" (mindegyik elemet beleértve, ha mellette nem "none" van) valamelyik irányba. Például, megkapja az "x" paraméterét (az előző példából), akkor át kellene "alakulnia" ilyenné: "none" "none" "x" "y", és ugye az utolsó "x" kicsúszik a tömbből, az már nem kell. Van ötletetek, ezt hogyan lehetne megcsinálni? A lényeg a "tolás", hogy minden mögötte lévő nem "none" csússzon vele együtt, ha pedig egy elem a szélén van, megy a kukába.

2018. jan. 24. 13:28
 1/5 anonim ***** válasza:
Ez teljesen értelmetlen.
2018. jan. 24. 13:55
Hasznos számodra ez a válasz?
 2/5 A kérdező kommentje:

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.

2018. jan. 24. 14:13
 3/5 anonim ***** válasza:

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];

}

2018. jan. 24. 14:30
Hasznos számodra ez a válasz?
 4/5 anonim ***** válasza:
Utolsó vagyok, ide meg a ciklusnagba kell a feltetel, hogy mikor ne csusszon ( ha i. elem none)
2018. jan. 24. 14:31
Hasznos számodra ez a válasz?
 5/5 anonim ***** válasza:

#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.

2018. jan. 26. 18:17
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!