A teljes feladat során el kell készítenetek négy osztályt: egyet az űrhajók jellemzésére (zh.SpaceShip
),
egyet az űrhajó rajok jellemzésére (zh.Squad
), egyet az űrhajók szöveggé alakítására / szöveggből
visszaolvasására (zh.Converter
), egyet az űrhajók mentésére / betöltésére (zh.SpaceIO
).
A feladatban szereplő űrhajóknak van neve és tűzereje. Két űrhajó akkor egyenlő, ha a nevük és a tűzerejük megegyezik. Az űrhajókat lehet fejleszteni, lekérdezni a nevüket, tűzerejüket, és két űrhajót össze lehet hasonlítani egymással.
A feladatban szereplő űrhajórajokhoz lehet űrhajót hozzáadni, űrhajót eltávolítani meg lehet róla tudni, hogy hozzá tartozik-e egy bizonyos hajó, hogy a raj hány lelket számlál, hogy mennyi az össz tűzereje, és le lehet kérni a tagjainak listáját úgy, hogy azok tűzerő szempontjából csökkenő sorrendben adják vissza a bennfoglalt űrajókat.
Segítségül le lehet tölteni a spacezh.zip file-t, mely teszteket tartalmaz a lehető leg teljeskörűbb megoldás elkészítéséhez. Azonban fontos megjegyeznünk, hogy a tesztek lefutása nem garncia a jegy megszerzésére, mivel csak olyan hibákra tudunk tesztet készíteni, ami eszünkbe jut. Sajnos az elmúlt ZH-k szomorú tapasztalata, hogy a hallgatók sokkal változatosabban képesek elrontani a forrás kódot, mint sem azt mi el tudnánk képzelni. Fontos észrevennünk, hogy a cél nem az, hogy megfeleljünk a teszteknek, hanem hogy helyesen implementáljuk a feladatot. Persze ha nem fut le a teszt, valószínűleg a megoldásunk sem jó, de ez a kapcsolat továbbra sem implikálja, hogy helyesen lefutó teszt esetén helyes a megoldásunk is.
Implementáld a zh.SpaceShip
osztályt, mely implementálja a java.lang.Comparable<SpaceShip>
interface-t. A feladat elkészítsében a test.ShipTest
lehet a segítségedre
SpaceShip(String, int)
Konstruktor, beállítja az űrhajó nevét és tűzerejét.
int getPower()
Visszatér a hajó tűzerejével
void improve(int)
A megadott számmal növeli a hajó tűzerejét. (Negatív számnál csökkenti.)
String getName()
Visszatér a hajó nevével.
boolean equals(Object)
Megvizsgálja, hogy a paraméterül kapott objektum egyenlő-e ezzel a hajóval.
int compareTo(SpaceShip)
Megvizsgálja, hogy a pareméterül kapott hajó, vagy ezen hajó tűzereje a nagyobb-e.
1
0
-1
Implementáld a zh.Squad
osztályt. A feladat elkészítésében a test.SquadTest
lehet a segítségedre.
void add(SpaceShip)
Hozzáadja a paramétert a rajhoz.
void remove(SpaceShip)
Törli a paramétert a rajból.
boolean belongsHere(SpaceShip)
true, ha a parméter tagja a rajnak, flase
egyébként.
int headCount()
Megmondja, hány tagú a raj.
int sumPower()
Megmondja, mennyi a raj tagjainak at össz tűzereje.
List<SpaceShip> getList()
Visszaad egy listát, melyre a következők igazak:
- A raj midnen tagja szerepel a listában.
- A lista minden elemére igaz, hogy a tűzereja nagyobb egyenlő, mint az őt követő elemé.
- Az egyenlő tűzerejű tagok sorrendje nem fontos.
Implementáld a zh.Converter
osztályt. A feladat elkészítésében a test.ConverterTest
lehet a segítségedre.
static String shipToString(SpaceShip)
Az űrhajót egy *név*:*tűzerő* alakú szöveggé alakítja.
static SpaceShip stringToShip(String)
A paraméterből előállít egy űrhajót.
IllegalArgumentException-t dob.
- Ha a pareméter második tagja nem szám, akkor
IllegalArgumentException-t dob.
- Ha a pareméter második tagja 1-nél kisebb szám, akkor
IllegalArgumentException-t dob.
- Ha a paraméter *név*:*tűzerő* alakú szöveg, akkor visszadja a *név* nevű, *tűzerő* tűzerejű hajót.
Implementáld a zh.ShipIO
osztályt. A feladt elékszítésében a test.IOTest
lehet a segítségedre.
static void save(String, List<SpaceShip>) throws FileNotFoundException
Az első paraméter azon
file neve, melybe lementi a második paraméterként kapott lista elemeit. A kiment tulajdonságai:
static List<SpaceShip> load(String) throws IOException
A paraéterül kapott filenév által jelölt
file-t megnyitja, és kiolvassa a benne lévő hajókat. A file tulajdonságai: