2014. szeptember 17., szerda

Lottószimulátor - Futtató program

Most hogy készen van a Szelveny osztály, teszteljük azt. Ehhez kell egy úgynevezett tesztelő vagy futtató program. Nézzük meg hogy miért is van ez.

A Java tisztán objektum-orientált nyelv. Ez azt jelenti hogy minden objektum a programban. Az objektumok valamilyen osztály egy-egy példánya, mely a példányosítás során jön létre. Az egyes objektumpéldányok létrehozása kostruktorral történik. Ha nem definiálunk konstruktort akkor is létezik az osztály nevével azonos nevű metódus. Ennek fő feladata a memóriafoglalás és az objektum kezdeti állapotának beállítása. A Szelvény osztálynak két konstruktort definiáltunk. Egy paraméterezettet és egy paraméter nélkülit. A példányosítás után az objektumnak a publikus metódusain keresztül üzeneteket tudunk küldeni, illetve a publikus adattagok közvetlenül elérhetők (ezt én kerülendőnek tartom még akkor is ha triviális lenne a megoldás).

Minden osztályt külön forrásfájlban (.java kiterjesztésű fájl) kell definiálni. A forrásfájl nevének meg kell egyezni az osztály nevével. Így lett a Szelveny osztályunk a Szelveny.java fájlba definiálva.

Amikor egy osztályt a virtuális gépbe betöltünk akkor a JVM megpróbálja elindítani az osztály main() metódusát. Ha ilyet talál akkor elindul a metódus. Így indíthatók a programok.

Hozzunk létre most egy LottoTest osztályt, amibe létrehozzuk a main() metódust. Ennek is szabályai vannak, az alábbi kötött formában kell definiálni a main()-t.

  1. public class LottoTest {
  2.    public static void main(String[] args){
  3.      //létrehozunk két szelvényt
  4.      //sz1 automatikusan generált 5 számot fog tartalmazni
  5.      Szelveny sz1 = new Szelveny();
  6.      
  7.      //sz2 a paramétrelistájában megadott öt számot tartalmazza
  8.      Szelveny sz2 = new Szelveny(19,71,8,16,7);
  9.  
  10.    }
  11. }

Ezzel létrehoztunk két objektumot, melyek tartalmaznak tippeket. Ezeket a tippeket írassuk most ki!
Rá kell jönnünk hogy a szelvény osztályban nem készítettünk metódust a kiíratásra, az adattag ami a tippeket tartalmazza az pedig private (nagyon helyesen), amihez ugyebár az objektumon kívülről nem lehet hozzáférni. Készítenünk kell hát valamilyen metódust ami kiíratja, vagy visszaadja a tippeket.
A Java-ban szokás definiálni egy toString() metódust. Ez kvázi szabvány. A metódus visszaad egy String típusú értéket mely tartalmazza azt a szöveget, amit az objektum adatairól  tartalmaz információt. Most ezt fogjuk megadni. Egyébként a számok tárolására használt TreeSet konténernek is van "gyári" toString() metódusa, amit fel is használunk.
Természetesen a Szelveny.java fájlt kell kiegészíteni a következő sorokkal:

  1. public String toString(){
  2.    // a TreeSet objektum toString() metódusát úgy írták meg hogy
  3.    // [] jelek között, vesszővel elválasztva felsorolja
  4.    // növekvő sorrendben az elemeit. Ez nekünk teljesen megfelel!
  5.  
  6.    return "Szelvény száma: "+szelvenyId+" Tippek: " + tippek.toString();
  7. }

Ezek után már a tesztelő osztályunkban a példányosítások után használhatjuk is a szelvények toString()-jét a kiíratásra.
A kiíratáskor a kiertekel() metódust felhasználva, értékeltessük is ki a szelvényeket.
Ez lesz a tesztelő osztályunk tartalma:

  1. public class LottoTest {
  2.    public static void main(String[] args){
  3.      //létrehozunk két szelvényt
  4.      //sz1 automatikusan generált 5 számot fog tartalmazni
  5.      Szelveny sz1 = new Szelveny();
  6.      
  7.      //sz2 a paramétrelistájában megadott öt számot tartalmazza
  8.      Szelveny sz2 = new Szelveny(19,71,8,16,7);
  9.  
  10.      // ha nem adjuk meg cska az objektum nevét, akkor megpróbálja megfelelő típusúra konvertálni.
  11.      //String típushoz a toString() metódust hívja automatikusan.
  12.      System.out.println(sz1 + " Találatok száma: " + sz1.kiertekel(2,7,18,71,87));
  13.      System.out.println(sz2 + " Találatok száma: " + sz1.kiertekel(2,7,18,71,87));    
  14.  
  15.    }
  16. }


Futtatás hatására a kimenet hasonló lesz  (valószínű más számok jelennek meg az sz1 kiírásakor)

Szelvény száma: -1 Tippek: [8, 51, 66, 71, 75] Találatok száma: 1
Szelvény száma: -1 Tippek: [7, 8, 16, 19, 71] Találatok száma: 2


Nincsenek megjegyzések:

Megjegyzés küldése