Az előző oldalon az volt a feladat, hogy egy Innivalo toString-je írja ki az innivaló tulajdonságait. Nekem valami ilyesmi lett:
public class Innivalo {
double felszolgaltMeret=5; // dl
double alkoholTartalomSzazalek=4; // %
String nev;
Innivalo(String nev,double felszolgaltMeret,double alkoholTartalomSzazalek) {
this.nev=nev;
this.felszolgaltMeret=felszolgaltMeret;
this.alkoholTartalomSzazalek=alkoholTartalomSzazalek;
}
public String toString() {
return nev+", "+felszolgaltMeret+" deci, "+alkoholTartalomSzazalek+"%";
}
}
Ekkor az eredmény:
Jack most feladta, mert szünetre van szüksége!
Jack ezt itta:
Kozel sör, 5.0 deci, 4.0%
Kozel sör, 5.0 deci, 4.0%
Törkölypálinka, 0.5 deci, 40.0%
Jane ezt itta:
Törkölypálinka, 0.5 deci, 40.0%
No ez már döfi! De mi lenne, ha az Ember-nek is csinálnánk rendes toString-et? Akkor az Ember össze tudja szedni a nevét, akár azt is, hogy összesen mennyit ivott, és persze hozzátehetné a megivott italok listáját is, hogy ne a Kocsma-ban kelljen ezt kitúrni.
Képzeld el valóságban. Jack-tól kéred, hogy mutassa, mit ivott (illetve ha már mutatja, az nem jó), vagy a Kocsma-tól? Jack-tól! Tehát eddig kicsit csúnya volt tőlünk, hogy a Kocsmában voltak azok a for-each ciklusok. No akkor fixáljuk meg, legyen az Embernek toString-je!
Először is, az Ember osztályba tegyünk egy hercig toString-et:
public String toString() {
return nev+" megivott "+ivottMennyiseg+" deci italt, össz. "+ivottMennyiseg+" deci alkohol tartalom.";
}
Másodszor is, guberáljuk ki a Kocsma kódból a catch ágból a vacakolást a mindenféle printekkel meg for-each ciklusokkal:
public class Kocsma {
public static void main(String[] args) {
Ember jack=new Ember("Jack",1.2);
Ember jane=new Ember("Jane",1);
try {
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());
} catch (Exception e) {
System.out.println(e.getMessage());
}
System.out.println(jack);
System.out.println(jane);
}
}
Huhh? Ugyeugye, nocsak, nalám? Ki lehet írni jack meg jane "értékét", mennyivel olvashatóbb már a kód!
Ez az eredmény:
Jack most feladta, mert szünetre van szüksége!
Jack megivott 10.5 deci italt, össz. 10.5 deci alkohol tartalom.
Jane megivott 0.5 deci italt, össz. 0.5 deci alkohol tartalom.
Feladat: tedd bele az italok listáját!
De hopp, a for each ciklust kidobtuk ugyan a Kocsma kódjából, de bele kellene tenni az Ember toString-jébe, hogy amikor kiírjuk Jack értékét, akkor listázza a megivott italokat is.