Különféle emberek

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?

De akkor ki is dőlt ki?

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());
    }

}
A változóknak és objektum példányoknak lehet neve (jack, jane) de ezt magáról nem tudja eldönteni hogy épp a programban hogy hívtad. Egy objektum példányhoz szükséges összes adatot a konstruktorban kell átadni.

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.