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 az egyforma méretű dobozokba csomagolt termékek egyetlen futószalagra kerülnek, ahonnan a szállítók szállítják tovább őket. A dobozok között van olyan, amelyben törékeny termék van, ezeket a szállítók speciális helyre pakolják a kamionjukban. A gyárból való elszállítás módjáról a kapcsolódó feladatban lesz részletesebb leírás.
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ószalagon.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.torekenyE
: példányszintű, paraméter nélküli, boolean
visszatérésű értékű metódus, amely azt jelzi, hogy törékeny-e az adott dobozban található termék. Itt mindig false
-t adjunk vissza (majd a leszármazott osztályban definiáljuk felül)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 az érték előtt egy felkiáltójel (!
), amennyiben törékeny a dobozban található termék (ha a torekenyE
metódus igazat ad vissza). Pl. "[150]"
v. "[!100]"
TorekenyDoboz
osztály – a Doboz
osztályból származiktorekenyE
: definiáld felül a szülőosztályban található metódust úgy, hogy true
értéket adjon vissza.ertekNovekedes
: int
típusú, osztályszintű
változó, azt adja meg, hogy hány százalékkal kell megnövelni a törékeny
dobozok eredeti értékét azért, mert speciális szállítást igényel. Az
kezdőértéke legyen 20
, amit ne lehessen megváltoztatni, viszont akárhonnan lekérdezhető legyen.getErtek
: definiáld felül a szülőosztályban található metódust úgy, hogy az ertek
változóban tárolt eredeti értéknél az ertekNovekedes
változóban tárolt százalékkal többet adjon vissza. Pl.: ha az ertek
változó értéke 200, a getErtek
240-et adjon visszaGyar
osztálygetElsoNormalDoboz
: példányszintű, paraméter nélküli, Doboz
visszatérési értékű metódus, amely visszaadja a futószalagon található első nem törékeny dobozt (amelynek a torekenyE
metódusa hamisat ad vissza). Levenni nem kell a szalagról. Amennyiben egyetlen ilyen 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. "[100]_[!200]_[!160]"TorekenyDoboz
osztályboolean
típusú változót, ami akkor false
, ha nem kell törékenynek tekinteni a dobozt (kezdőértéke legyen true
). Módosítsd a torekenyE
metódust úgy, hogy ebben a változóban tárolt igazságértéket adja vissza.boolean
érték annak megfelelően, hogy törékenyként kell-e kezelni a dobozt vagy nem.getErtek
metódust úgy, hogy csak abban az
esetben adjon vissza az eredetinél nagyobb értéket, ha a dobozt
ténylegesen törékenynek kell tekinteni (a torekenyE
metódus igazat ad vissza)Szallito
osztályint
típusú értéket vár: az első adja meg,
hogy összesen hány doboz fér a szállítóra, a második pedig ebből a
törékeny dobozok helyének a számát. Feltételezhetjük, hogy a
konstruktort mindig helyes paraméterekkel hívják meg, azaz a második
szám kisebb vagy egyenlő az elsőnél.felrak
: példányszintű, boolean
visszatérési értékű metódus. Egy Doboz
típusú paramétere van.
A paraméterben megadott dobozt szeretnénk feltenni az autóra a következő szabályok szerint:
torekenyE
metódus igazat ad
vissza), akkor azt csak a törékeny dobozoknak fenntartott helyre
tehetjük, amennyiben van még a szállítón ilyen helytorekenyE
metódus hamisat ad
vissza) normál helyre teszünk, amennyiben még van ilyen hely; ha nincs,
akkor pedig tehetjük a törékeny dobozoknak fenntartott helyre is, ha ott
van még helyHa a paraméterben megadott doboz felrakása sikeres, true
értéket adjuk vissza, egyébként pedig false
-t.
getDobozok1
: példányszintű, paraméter nélküli függvény, amely azon dobozok listáját adja vissza, amelyek a normál rakodótérben vannak
getDobozok2
: példányszintű, paraméter nélküli függvény,
amely azon dobozok listáját adja vissza, amelyek a törékeny dobozoknak
fenntartott helyen vannakSzallito
osztálylepakol
: példányszintű, int
visszatérési értékű függvény. Egy int
típusú paramétert vár, amely azt adja meg, hogy hány dobozt szeretnénk
lepakolni a szállítóról. Mivel azokat nehezebb szállítani, a törékeny
dobozoknak fenntartott helyről kezdjük el lepakolni a dobozokat (a lista
elejéről kezdve), majd jöhetnek a normál helyen lévők. Ha a megadott
szám nagyobb vagy egyenlő, mint amennyi doboz összesen volt a szállítón,
pakoljuk le az összes dobozt. Ö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 lepakolt dobozok összértéke adja (amit a getErtek
metódussal tudunk lekérdezni tőlük).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 sorban felpakoljuk a szállítóra a dobozokat, amíg el nem
fogy az összes doboz a szalagról, vagy el nem akadunk egy olyannál, ami
már nem tehető fel a szállítóra. Ha ez egy törékeny doboz volt, de
"normál" hely még lenne a szállítón, akkor ezt a dobozt átugorva
megpróbálhatjuk felpakolni a következőt, stb, amíg az összes hely be nem
telik a szállítón, vagy a szalag végére nem értünk. A szállítóra
felpakolt dobozokat távolítsuk is el a futószalagról, a visszatérési
értékben pedig adjuk meg, hogy hány dobozt pakoltunk fel. A for-each ciklussal történő listabejárás során a listát nem lehet változtatni, ezért egyes feladatok megoldásánál célszerű lehet 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.