A feladat egy olyan alkalmazás készítése, amellyel szimulálni tudjuk termékek elszállítását gyárakból. A gyárakban a dobozokba csomagolt termékek egyetlen futószalagra kerülnek, ahonnan a szállítók szállítják tovább a dobozokat a központi raktárba, vagy egyéb - azonosítóval megadott - helyekre. A gyártás során a legyártott dobozok a futószalag végére kerülnek, a szállítók pedig a futószalag elejétől pakolnak.
Az osztályok kerüljenek egy szallitas
nevű csomagba.
Gyar
osztályDoboz
típusú) dobozokat egy listában tároljuk, egy gyár létrejöttekor a futószalagja üres.legyart
: olyan void
visszatérési értékű metódus, amelynek egyetlen paramétere egy újonnan legyártott doboz, amit a futószalag teszünk.dobozokSzama
: paraméter nélküli, int
visszatérési értékű függvény, amely megadja, hogy hány doboz van a futószalagonkozpontiRaktar
: byte
típusú, osztályszintű változó, amelyben a központi raktár azonosítóját tároljuk. Az kezdőértéke legyen 1
, amit ne lehessen megváltoztatni, viszont akárhonnan lekérdezhető legyen.Doboz
osztályertek
nevű adattagjában tároljuk a dobozba csomagolt termék értékét (int
típusú). A változót ne lehessen kívülről elérni, viszont legyen hozzá publikus lekérdező (getErtek
) és beállító (setErtek
) metódus.getRaktar
: példányszintű, paraméter nélküli, byte
visszatérésű értékű metódus, a Gyar
osztályban található központi raktár azonosítóját adja vissza.toString
paraméter nélküli, String
visszatérési értékű függvény. Egy doboz String reprezentációjában
szögletes zárójelek között szerepeljen a doboz értéke (amit a getErtek
metódus ad vissza) és a raktár, ahová szállítani kell (a getRaktar
metódus visszatérési értéke) vesszővel elválasztva. Szóközök, újsor, stb. le negyen benne! Pl. "[2500,1]"
IranyitottDoboz
osztály – a Doboz
osztályból származikraktar
egy új adattag, amelyben annak a raktárnak a byte
típusú azonosítóját tároljuk, ahová a dobozt majd szállítani kell.getRaktar
: definiáld felül a szülőosztályban található metódust úgy, hogy a raktar
változó értékét adja vissza.getErtek
: definiáld felül a szülőosztályban található metódust úgy, hogy a ertek
változóban tárolt értéknél
20%-al nagyobbat adjon mindig vissza (ennyiért szeretnénk eladni a dobozt).Gyar
osztálygetElsoDoboz
: példányszintű, paraméter nélküli, Doboz
visszatérési értékű metódus, amely visszaadja a futószalagon található
első dobozt (levenni nem kell a szalagról). Amennyiben egyetlen doboz
sincs a futószalagon, null
-t adjon vissza.toString
: a futószalagon lévő dobozok String reprezentációját adja vissza, ahol a dobozok aláhúzás jellel (_
) legyenek elválasztva. Az utolsó után ne szerepeljen ilyen jel. Pl. "[2500,1]_[1600,1]_[1800,2]"IranyitottDoboz
osztálygetErtek
metódust úgy, hogy csak abban az esetben adjon vissza 20%-al nagyobb értéket, ha a doboz nem a központi raktárba van címezve.Szallito
osztályHashSet
), amely pedig azon raktárak azonosítóját tartalmazza, ami a szállító úticéljai között szerepel.getDobozok
: példányszintű, paraméter nélküli metódus, amely visszaadja a szállítón lévő dobozok listáját (lehet List
típusú, vagy annak leszármazottja)addUticel
: példányszintű, void
visszatérési értékű metódus, amelynek egyetlen byte
típusú paramétere azt adja meg, hogy milyen azonosítójú raktárt szeretnénk felvenni az úticélok közéfelrak
: példányszintű, boolean
visszatérési értékű metódus. Egy Doboz
típusú paramétere van. A paraméterben megadott dobozt akkor tesszük fel
az autóra, ha a doboznál tárolt raktár azonosító megtalálható a
szállító úticéljai között. Ekkor true
értékkel térünk vissza, és felvesszük a dobozt a szállító listájára, egyébként pedig false
értéket adunk vissza. Gyar
osztályelszallit
: példányszintű, int
visszatérési
értékű, egyparaméteres metódus. Paramétere egy szállító. A futószalag
elejéről kezdve felpakoljuk a szállítóra azokat a dobozokat, amelyek
megfelelnek a szállító úticéljának, és eltávolítjuk őket a gyár
futószalagjáról. A visszatérési értékben megadjuk, hogy hány dobozt
pakoltunk fel. Szallito
osztálylepakol
: példányszintű, int
visszatérési értékű függvény. Egy byte
típusú paramétert vár, amely azt adja meg, hogy éppen melyik
azonosítójú raktárnál pakolunk le. A feladat kikeresni az összes dobozt,
ami ebbe a raktárba volt címezve, és lepakolni, azaz eltávolítani a
szállító listájáról ezeket a dobozokat. Össze kell számolni és a
visszatérési értékben meg kell adni azt is, hogy mennyi pénzt kérünk a
raktártól a szállítmányért: ezt a dobozok összértéke adja (amit a getErtek
metódussal tudunk lekérdezni tőlük).A for-each ciklussal történő listabejárás során a listát nem lehet változtatni, ezért a fenti két feladat megoldásánál célszerű az eltávolítandó elemeket egy külön ideiglenes listába kigyűjteni, majd ezt a listát bejárni, és a kívánt elemeket eltávolítani az eredeti listából.