Java SE 8 Documentation

Gyakorlás

  • Készítsük a utils.IntList osztály implementációját! Ezt az osztályt int értékek tömbösített, dinamikus tárolására kell tudnunk használni és nagyban hasonlítani fog a java.util.ArrayList osztályhoz. Legyenek ilyen konstruktorai:

    • nincs semmilyen paramétere (ilyenkor a tömb még nem tartalmaz semmit),
    • meg lehet adni egy int értékeket tartalmazó tömbbel, hogy mit tároljon kezdetben,

    valamint legyenek a következő műveletei:

    • add(): egy új elem hozzáadása a tömb végére,
    • add(): elem beszúrása az adott indexre (túlterhelt változat),
    • concat(): egy másik IntList tartalmának hozzáfűzése az aktuálishoz,
    • get(): az első elem lekérdezése
    • get(): adott indexű elem lekérdezése (túlterhelt változat),
    • set(): adott indexű elem beállítása, amennyiben van olyan indexű elem,
    • remove(): az első elem törlése,
    • remove(): adott indexű elem törlése (túlterhelt változat),
    • indexOf(): elem indexének megkeresése, ha nem található, akkor -1,
    • size(): a jelenleg tárolt elemek száma,
    • clear(): az összes elem törlése,
    • toArray(): az osztályban tárolt értékeket egyetlen tömbként történő visszaadása,
    • show(): szöveggé alakítás.

    és legyen egy olyan, read() nevű osztályszintű metódusa, amellyel szövegből tudjuk beolvasni a tárolni kívánt elemeket. Az értékeket ebben a beolvasni kívánt szöveges reprezentációban egyszerűen szóközökkel választjuk el. Ellenőrizzük azt is, hogy a szövegben valóban számok szerepelnek! Ha ez nem teljesül és nem tudjuk beolvasni az összes elemet, akkor adjuk vissza null referenciát!

    Ügyeljünk arra, hogy az osztály semmilyen más egyéb eleme ne legyen a külvilág számára elérhető!

  • Valósítsunk meg arrays.DoubleMatrix osztályt, amely double típussal valós számokat tárol egy mátrixban! Az osztálynak legyenek a következő műveletei:

    • konstruktor, amely megadja, hogy az egyes dimenziókban mekkora a mátrix kiterjedése,

    • set(), amellyel be tudunk állítani értéket az adott pozícióban,

    • get(), amellyel le tudjuk kérdezni az adott pozíción található értéket,

    Érvénytelen indexek (vagyis amikor olyan értéket adunk meg, amelyek már nem a mátrix egy elemét címzik) esetén ne változtassuk meg a mátrixot! A get() esetén pedig Double (csomagoló) objektumokat adjunk vissza, így a null referenciával tudjuk jelezni, ha érvénytelen pozícióról nem kérdezhető le elem.

  • Általánosítsuk az előbbi arrays.DoubleMatrix osztályt arrays.generic.DoubleMArray néven, amely tetszőleges dimenziójú tömböt képes ábrázolni egyetlen egydimenziós tömb segítségével! Az interfésze legyen lényegében az előzővel megegyező, csupán egészítsünk ki egy getDimensions() metódussal, amely visszaadja, hogy mekkorák a tömb egyes dimenziói!

  • Módosítsuk az előbbi arrays.DoubleMatrix osztályunkat úgy, hogy előbbi, általánosított arrays.generic.DoubleMArray osztályunk segítségével valósuljon meg! Természetesen kifelé ennek semmi különbséget nem szabad jelentenie.

  • Írjunk egy IntTree osztályt, amely egy egész számokat rendezetten tároló bináris fát ábrázol! A bináris fa értékek olyan láncolata, ahol minden értéknek nulla, egy vagy két rákövetkezője lehet, és csak nulla vagy egy megelőzője. A láncolást IntTree objektumokra vonatkozó referenciákkal oldjuk meg, ezek fognak mutatni az adott fabeli csomópont bal- és jobb részfáira. Az csomópontokban ezenkívül még egy int értéket is eltárolunk. Ha nincs megelőző, akkor a fa gyökeréről beszélünk.

    Legyenek a következő műveleteink:

    • insert(), amely megkap egy int értéket és beilleszti a fába, annak értékétől függően. Ha a beszúrandó elem kisebb, a fa gyökerében található elemnél, akkor illesszük be a bal részfába (rekurzió). Ha nincs még bal részfánk, akkor hozzuk létre azzal az elemmel a gyökerében! Ugyanezt végezzük el a jobb részfára, ha a beszúrandó elem nagyobb, vagy egyenlő, mint a gyökérben levő!

    • contains(), amely eldönti, hogy a paramétereként megadott elem megtalálható-e a fában! Ezt egy logikai értékkel adja vissza: igaz, ha igen, hamis, ha nem! (Ez is rekurzív metódus lesz.)

    • egy olyan konstruktor, amely megkapja int értékek egy tömbjét és azokat beszúrja a fába.

    • egy olyan konstruktor, amely egy elemből létrehoz egy olyan fát, amelyben csak egyetlen gyökérelem van (és nincsenek rákövetkezői).

    • toArray(), amely egy int értékeket tartalmazó tömbben visszaadja azokat az értékeket, amelyeket a fában tárolunk! Ha szeretnénk kihasználni, hogy a beszúrást rendezetten végeztük, akkor érdemes ezt a tömböt úgy felépíteni, hogy először a bal részfa elemeit vesszük, aztán a gyökérben levő elemet, majd a jobb részfa elemeit. Az így összeállított tömb is rendezett lesz, ezt nevezik inorder bejárásnak. (Természetesen ez a metódus is rekurzív.)

    • show(), amely megadja egy fa szöveges alakját. Itt most elegendő, ha csak a tárolt elemeket jelenítjük meg egy felsorolásban.

    • equalsTo(), amely eldönti az objektumról és a paraméteréről, hogy a kettő megegyezik-e. Két bináris fát akkor tekintsünk egyenlőnek, ha ugyanazokat az elemeket tartalmazzák!

Linkek

Kapcsolódó forráskódok
Oktatói honlap
Vissza