Az emberek alkohol-tűrése különbözik. Míg az italoknál mondhattuk, hogy minden Sor 4%-os, addig az embereknél nem hozhatunk ilyen egyszerű szabályokat.
Ezért az Emberből nem csinálunk leszármazottakat (egyelőre), de ennek is megcsináljuk a konstruktorát:
public class Ember {
double fogyasztottAlkohol=0;
double alkoholTures=1;
// ez itt a konstruktor
Ember(double alkoholTures) {
this.alkoholTures=alkoholTures;
}
void igyal(Innivalo innivalo) {
fogyasztottAlkohol+=innivalo.felszolgaltMeret*innivalo.alkoholTartalomSzazalek/100;
if (fogyasztottAlkohol>alkoholTures) {
System.out.println("Jajj, ez sok volt!");
System.exit(0);
}
}
}
Hogy is volt? Jack 1.2 deci nyers alkohol után dől ki, Jane meg 1 deci után! No akkor játsszuk le:
public class Kocsma {
public static void main(String[] args) {
Ember jack=new Ember(1.2);
Ember jane=new Ember(1);
jack.igyal(new Sor());
jack.igyal(new Sor());
jane.igyal(new Palinka());
jack.igyal(new Palinka());
jack.igyal(new Palinka());
jane.igyal(new Bor());
jack.igyal(new Palinka());
jack.igyal(new Sor());
jack.igyal(new Palinka());
jack.igyal(new Sor());
}
}
Emlékszel még, mi volt az eredeti feladat? Ki fog előbb kidőlni, ha isznak mindenféle sorrendben, pld:
Nézd meg a programot! Pont azt írtuk le benne, ami a feladat. Jacknak sört kell innie (nem pedig fura matematikai számításokkal növelni valami változó értékét), és pont ezt írtuk le. Királyos?
Ha a progit lefuttatod, tutira valamelyik versenyző kidől. De melyik? Nos, fogalmunk sincs, mert az Ember osztályban csak azt írjuk ki, hogy kidőltem. De hogy ki vagyok? Azt az Ember osztály nem tudja! Nos, okosítsuk fel!
Kell neki egy új, szöveges tulajdonság, az ember neve. Mivel ezt magától nem tudja kitalálni, ezért ezt is konstruktor paraméterben kell megkapni. Valahogy így:
public class Ember {
double fogyasztottAlkohol=0;
double alkoholTures=1;
String nev; // ez a neve
// itt amikor Ember példányt hozunk létre, kapunk egy nevet is hozzá
Ember(String nev,double alkoholTures) {
this.nev=nev;
this.alkoholTures=alkoholTures;
}
void igyal(Innivalo innivalo) {
fogyasztottAlkohol+=innivalo.felszolgaltMeret*innivalo.alkoholTartalomSzazalek/100;
if (fogyasztottAlkohol>alkoholTures) {
// ide most kiírjuk a nevet is
System.out.println("Jajj, ez sok volt! "+nev+" kidolt!");
System.exit(0);
}
}
}
public class Kocsma {
public static void main(String[] args) {
Ember jack=new Ember("Jack",1.2); // Itt megadjuk a nevét is
Ember jane=new Ember("Jane",1);
jack.igyal(new Sor());
jack.igyal(new Sor());
jane.igyal(new Palinka());
jack.igyal(new Palinka());
jack.igyal(new Palinka());
jane.igyal(new Bor());
jack.igyal(new Palinka());
jack.igyal(new Sor());
jack.igyal(new Palinka());
jack.igyal(new Sor());
}
}
Feladat: ki dől ki ennyi iváskor?
Próbáld ki a programot, és döntsd el! Nyugodtan játssz vele, hiszen bármilyen sorrendben bármit bárki megihat, a progi szuperül működik mindenre.