Hogyan oldajam meg ezt a java feladatot?
"Írja ki a képernyőre, hogy melyik fiú szerepelt a legtöbbször a fiúk közül, és melyik lány a lányok közül! Ha több fiú, vagy több lány is megfelel a feltételeknek, akkor valamennyi fiú, illetve valamennyi lány nevét írja ki!"
Ez a 2015ös májusi emelt informatika érettségi programozás részének az utolsó feladatja.
A fiúk és a lányok neve már el van tárolva 2 különböző ArrayListben, de ötletem sincs, hogy hogyan lehet a leggyakoribb értéket megtalálni.
Klasszikus programozási tételekkel. Kigyűjtöd egy új tömbbe a neveket, és melléírod a darabszámot, aztán ezekre végzel egy index szerinti maximumkiválasztási tételt.
Valószínűleg ez a legbonyolultabb, de ehhez kell a legkevesebb eszköz ismerete. Pl. map sem.
Ezt úgy érted, hogy egy 2. tömbbe az adott szó indexére egy számot rakok, hogy hányszor fordult elő? Majd szimplán az egyik max értékbő kiírok egyet?
Köszi ez működhet.
Még egy kérdésem van, ez nem a feladathoz kell, de mi lenne ha ezzel a módszerrel kikéne írnom a 3 legtöbbet előforduló nevet?
Mert ebben a módszerben, annyiszor fog szerepelni a következő tömbben egy egyott szónak az előfordulásának száma, ahány ilyen szó van.
Utolsó mondat: ez rajtad múlik. Ha rosszul csinálod meg, akkor igen. De megcsinálhatod jól is, ha figyeled, hogy van-e már ilyen név.
De ha hajlandó vagy egy kicsit önállóan tanulni, akkor jobban jársz, ha megtanulod a HashSet (halmaz adattípus) használatát. Mivel matekórán tanultad, hogy egy halmazban egy elem csak egyszer fordul elő. Tehát ha a nevek listájából csinálsz egy halmazt, majd azt visszaalakítod listává, akkor automatikusan minden név csak egyszer fog szerepelni benne, és emellé már csak a számokat kell kigyűjteni. Érdemes új dolgokat tanulni, mert sok időt spórolhatsz vele.
Az első mondatod stimmel, a második nem.
"Majd szimplán az egyik max értékbő kiírok egyet?"
Nem a max. értékből, hanem a max. értékhez tartozó névből, és nem egyet, hanem az összeset, mert ezt kéri a feladat.
Ha nem akarod mappal, akkor lehet úgy is, hogy
csinálsz egy uj arraylistet
kiveszed az első nevet a listából, beírod az új arrayListbe, megszámolod hányszor fordul elő, kész
kiveszed a 2. nevet, megnézed hogy nincs e benne az új arrayListben, ha nincs, megszámolod.
stb. stb.
Nem szép de pár sorban megírható
5# Persze úgy értettem, hogy a max érték indexével megyegyező nevet a másik arrayben.
Pl.: ha kigyűjtöm az egyedi neveket egy arraylistbe és ahoz csinállok egy ilyen "számolgatós arrayt", ahol a név indexének megfelelő indexnek adom hozzá a számot ha az összes nevet és változatot tartalmazó listán találok egy olyan nevet.
Ennek már megkéne felelnie a kitalált problémámra is, nem?
Amúgy tudom, hogy meg kéne tanulnom azokat a dolgokat, de most érettségi előtt pár nappal már nem állok neki. Meg nem csak a programozást kell még átnéznem.
Igazából két lehetőséged van, mint azt már írták.
Vagy mapot használsz, vagy magad írod meg azt, ami a végén ugyanúgy map lesz, csak sokkal több időd megy el rá és sokkal könnyebben hibázhatsz.
Nyilván nagyon hasznos ismerni ezeknek az adatszerkezeteknek a lelki világát, de az érettségin, ahol időre kell teljesíteni, jobb használni a kész megoldásokat, a legtöbb nagyon egyszerű.
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!