A Java egy tisztán objektumorientált programozási nyelv és mint minden ilyen nyelvben osztályokkal és az osztályok alkotta osztályhierarchivál dolgozunk. Az osztályok a való világ egyes elemeinek, objektumainak absztrakció útján történő leképezései.
Most próbáljuk meg a feladattal kapcsolatban az első absztrakciót elvégezni. Képzeljük el hogy milyen osztályok és azok milyen kapcsolatai fogják alkotni a Lottószimulátort! Most nem törekszünk teljes részletességre, csupán nagy vonalakba gondoljunk a feladatra.
A lottófogadásokat szelvényeken tudjuk megtenni. Az összes fogadást és azok kezelését is meg kell valósítani egy közös helyen. Első menetben erre a két osztályra lesz szükségünk.
Nézzük ezeket részletesebben.
Szükség lesz (vagy nem?) egy olyan osztályra, ami a tippek tárolására alkalmas. Ezt úgy kell elképzelni mint a fogadó fejében lévő lottószámok, amiket meg szeretne tenni. Tehát semmi más nem jellemzi, csak maguk az ember elméjében létező számokat tartalmazza, amiket vagy megtesz a lottón vagy nem. Tehát ez még nem maga a fogadás ez csak egy tipp. Ahhoz hogy fogadás legyen belőle, ahhoz ki kell tölteni egy lottószelvényt. A kérdés az hogy maga a számsor, ami egyéb más jellemzővel nem rendelkezik azt szükséges-e külön osztályban megvalósítani vagy sem. Elsőnek induljunk el úgy hogy mégse csináljunk ebből külön osztályt.
Tehát a tippet már eleve egy szelvényen kezeljük, mert amíg nem teszik meg a fogadást addig tökmindegy hogy benne van-e valaki fejében öt szám vagy sem.
A lottószelvény osztálynak tárolni kell tudni az öt számot, illetve van egy 7 jegyű egyedi sorszáma amivel majd a joker játékra lehet fogadni. A sorszámot a szelvény létrehozásakor generáljuk. A lottószelvény a sorsolás után lehet nyertes szelvény akkor, ha legalább két találat van rajta. A szelvényobjektumnak a létrehozásakor vagy megadjuk az öt számot amire fogadást kötnek, vagy ha nem akkor generálunk öt számot. Ez tehát kétféle konstruktort jelent (többalakúság). Az hogy egy szelvény nyertes-e, azt egy metódussal fogjuk kiértékelni. Paraméterül adjuk át a kihúzott öt számot és eredményül adja vissza hogy hányas találat van a szelvényen.
Az implementációban az öt lottószám tárolására használjunk egy konténert. Ehhez használjuk a TreeSet tárolóosztályt, aminek az a jellemzője, hogy egy elemet csak egyszer tartalmazhat és az elemeket rendezve tárolja. Természetesen Integer elemekkel dolgozunk. A generálást a Math osztály Random() metódusával generáljuk. Ez a 0 és 1 között generál egy lebegőpontos véletlen számot. Ezt először 1 és 90 közöttivé kell alakítani, majd típuskényszerítéssel (cast) egésszé kell alakítani.
Íme a lottószelvényeket tároló osztály Java forrása:
Íme a lottószelvényeket tároló osztály Java forrása:
public class Szelveny {
private int szelvenyId = -1; //jelöljük így a szelvényt amíg nincs sorszáma
private TreeSet tippek = new TreeSet();
private boolean joker = false;
public Szelveny(){
//generálni kell 5 különböző számot 1-90 között.
//Ha egy számot már kisorsoltunk, akkor helyette új kell
for(int i=1;i<=5;i++){
int j;
do
j=(int)(Math.random()*89+1);
while(tippek.contains(j));
tippek.add(j);
}
}
public Szelveny(int n1, int n2, int n3, int n4, int n5){
//paraméterekben megkapjuk a tippeket.
//Az hogy a tippek helyesek-e azzal ne foglalkozzunk.
//Nem tudjuk hogy mi volt a célja a szelvény kitöltőjének,
//had töltse ki ahogy akarja. Majd a szelvény beadásakor
//kell eldönteni hogy elfogadjuk-e a tippet, vagy sem.
tippek.add(n1);
tippek.add(n2);
tippek.add(n3);
tippek.add(n4);
tippek.add(n5);
}
public int kiertekel(int n1, int n2, int n3, int n4, int n5){
//le kell ellenőrizni az öt számot egyenként.
//a -1 azt jelenti hogy érvénytelen a szelvény
int talalat = -1;
// érvényes a szelvény ha 5 tippet tartalmaz
if (tippek.size()==5) talalat++;
if (tippek.contains(n1)) talalat++;
if (tippek.contains(n2)) talalat++;
if (tippek.contains(n3)) talalat++;
if (tippek.contains(n4)) talalat++;
if (tippek.contains(n5)) talalat++;
return talalat;
}
}
private int szelvenyId = -1; //jelöljük így a szelvényt amíg nincs sorszáma
private TreeSet
private boolean joker = false;
public Szelveny(){
//generálni kell 5 különböző számot 1-90 között.
//Ha egy számot már kisorsoltunk, akkor helyette új kell
for(int i=1;i<=5;i++){
int j;
do
j=(int)(Math.random()*89+1);
while(tippek.contains(j));
tippek.add(j);
}
}
public Szelveny(int n1, int n2, int n3, int n4, int n5){
//paraméterekben megkapjuk a tippeket.
//Az hogy a tippek helyesek-e azzal ne foglalkozzunk.
//Nem tudjuk hogy mi volt a célja a szelvény kitöltőjének,
//had töltse ki ahogy akarja. Majd a szelvény beadásakor
//kell eldönteni hogy elfogadjuk-e a tippet, vagy sem.
tippek.add(n1);
tippek.add(n2);
tippek.add(n3);
tippek.add(n4);
tippek.add(n5);
}
public int kiertekel(int n1, int n2, int n3, int n4, int n5){
//le kell ellenőrizni az öt számot egyenként.
//a -1 azt jelenti hogy érvénytelen a szelvény
int talalat = -1;
// érvényes a szelvény ha 5 tippet tartalmaz
if (tippek.size()==5) talalat++;
if (tippek.contains(n1)) talalat++;
if (tippek.contains(n2)) talalat++;
if (tippek.contains(n3)) talalat++;
if (tippek.contains(n4)) talalat++;
if (tippek.contains(n5)) talalat++;
return talalat;
}
}
Nincsenek megjegyzések:
Megjegyzés küldése