Utolsó módosítás: 2016.11.10.
Hozzuk létre a Person nevű osztályt, mely egy személyt fog ábrázolni! Minden személynek van neve, és címe (két privát, szöveg típusú adattag) és fizetése (long típusú, a leszármazottak számára hozzáférhető adattag), mely kezdetben 30000.
Definiáljuk a következő metódusokat:
Egy konstruktort, mely paraméterül várja a nevet és a címet.
getName(), getAddress() metódusokat, melyek visszaadják a nevet és a címet.
toString() metódust, mely felüldefiniálja a java.lang.Object osztály toString() metódusát. Egy példa az előállított szövegre: "Rafael Nadal (Manacor, Spain) wage: 50000"
raise(), mely megemeli a fizetést 10000-rel.
Hozzuk létre a Teacher nevű osztályt, mely kiterjeszti a Person osztályt, és egy tanárt fog ábrázolni! Vegyük fel új adattagként a kurzusok nevét (privát, szöveg objektumok LinkedList referenciája)!
Definiáljuk az alábbi metódusokat:
Egy konstruktort, mely paraméterül várja a tanár nevét, és címét, melyekkel inicializálja a Person osztályban deklarált adattagokat. Haszánljuk a Person konstruktorát, hogy elkerüljük a kódismétlést! Ehhez szükség lesz a super() metódushívásra. A kurzusok listája legyen üres.
addCourse(), mely paraméterül várja egy kurzusnak a nevét, és ezt a kurzusok listájának a végéhez fűzi.
toString(), mely felüldefiniálja a Person osztály metódusát úgy, hogy kiegészíti a visszaadott szöveget. Például: "Teacher: Gipsz Jakab (Budapest) wage: 100000". A kódismétlés elkerüléséhez használjuk fel a Person osztály toString() metódusát. Ehhez szükség lesz a super minősítőre.
raise(), mely felüldefiniálja a Person metódusát. Ez 50000-rel emeli a fizetést.
Készítsük el a Student nevű osztályt, mely szintén kiterjeszti a Person osztályt! Vegyük fel új privát adattagként egy kurzusokon elért eredményeket tároló LinkedList referenciát!
Definiáljuk a következő metódusokat:
Egy konstruktort, mely paraméterül várja a hallgató nevét és címét, melyekkel inicializálja a Person osztályban deklarált adattagokat. Itt is használjuk a Person konstruktorát!
addCourseGrade(), mely paraméterül vár egy osztályzatot, és a lista végéhez fűzi.
getAverage(), mely egy szövegben adja vissza a diák átlagát.
toString() metódus, mely felüldefiniálja a Person osztály metódusát úgy, hogy kiegészíti annak eredményét. Például: "Student: Hát Izsák (Székesfehérvár) wage: 30000".
Hozzunk létre egy rövid main() metódust a PersonDemo osztályban! Definiálunk egy Person változót, mely egy Teacher objektumra mutat! Növeljük meg a fizetését, és írjuk ki a képernyőre az objektum szöveges reprezentációját! Melyik raise() és toString() hívódott meg?
Valósítsuk meg java.lang.Object referenciák dinamikusan növekvő méretű listáját ábrázoló utils.List osztályt! Az osztály láncolt listásan tárolja a referenciákat. Ez azt jelenti, hogy a referenciákat egymásra hivatkozó rekurzív listák sorozataként tárolja, ahol minden lista tárolja a legelső elemet (fejelem) és a többi elemet tartalmazó listát (farok).
Implementáljuk az alábbi műveleteket:
Egy konstruktor, mely paraméterül kap egy elemet, és létrehozza az elemet tartalmazó egyelemű listát.
getHead(), mely visszaadja a legelső elemet.
getTail(), mely visszaadja az első elemet nem tartalmazó maradék listát.
length(), mely rekurzívan kiszámolja a lista hosszát.
add(), mely a lista elejére fűz egy elemet.
remove(), mely eltávolítja az első elemet.
concat(), mely az aktuális lista után fűzi a kapott listát.
toString(), mely rekurzívan szöveggé alakítja a listát.
Készítsünk egy rövid main() metódust egy ListDemo osztályban! Hozzunk létre egy listát, és tegyünk bele néhány elemet! Vegyük ki az első elemet! Mennyire biztonságos a kiolvasás? Mennyire könnyen lehet elrontani a programot?
Haladóknak. Készítsük el a util.IntTree osztályt, mely egész számokat rendezetten tároló bináris fát megvalósít meg! A fa minden csúcsának nulla, egy vagy két gyermeke lehet és legfeljebb egy szülője. Ha egy csúcsnak nincs szülője, úgy az a csúcs a fa gyökere.
A láncolást egy-egy IntTree objektumra mutató referenciákkal oldjuk meg, melyek egy csúcs bal és jobb oldali gyerekére mutatnak. Emellett minden csúcs egy egész számot is tárol.
Valósítsuk meg az alábbi műveleteket az IntTree osztályon belül:
Konstruktor, mely egy int értékből létrehoz egy egyelemű fát, a gyökerében a megadott int értékkel.
insert(), mely beszúr egy int értéket a fába. Ha a szám kisebb, mint az aktuális csúcsban tárolt szám, akkor a bal oldali részfába szúrjuk be (rekurzívan). Ha nagyobb vagy egyenlő, akkor a jobb oldali részfába szúrjuk be (szintén rekurzívan). Ha nincs bal vagy jobb oldali részfa, ahova beszúrnánk, akkor hozzunk lérte egy új csúcsot a beszúrandó számmal.
contains(), mely eldönti, hogy egy paraméterként kapott szám megtalálható-e a fában (rekurzívan). Ha nem találtuk még meg és a kapott szám kisebb, mint az aktuális csúcsban tárolt, úgy a bal oldali részfában keresünk tovább, különben pedig a jobb oldaliban.
toArray(), mely egy int értékekből álló tömbben adja vissza a fában eltárolt értékeket. A tömbben először a bal oldali részfában tárolt elemek legyenek, majd a gyökérben tárolt elem, végül a jobb oldali részfában tárolt elemek. A tömbben a számok rendezettek lesznek. Ezt a bejárást hívják inorder bejárásnak.
toString() metódus, mely a fában tárolt értékek felsorolását adja vissza szövegként.
Készítsünk programot, mely egész számok sorozatát rendezi a bináris fa segítségével! A program sorban bekér egész számokat, melyeket beszúrja a fába. Ha elfogytak a számok, úgy a fa inorder bejárásával megkapjuk a rendezett sorozatot. Írjuk is ki a képernyőre a rendezett sorozatot!