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!