/* * Java-ohjelmointi, koe 16.12.1999 * Malliratkaisu tehtävään 2 * * Tehtävässä annettiin pisteitä oikein toteutetuista * kohdista seuravasti: * * luokan rakenne oikein 1 * * perii Alkuelain-luokan 1 * * muuttuja äo:lle 1 * * konstruktori (3) * kutsuu yliluokan konstruktoria 1 * asetaa oikein äo:n 2 * * äo:n palauttava metodi 1 * * pariudu-metodi (6) * kutsuu yliluokan metodia 1 * laskee perimien summat oikein 2 * laskee lapsen äo:n oikein 2 * palauttaa uuden lapsen 1 * * toString-metodi (2) * kutsuu yliluokan metodia 1 * palauttaa oikean merkkijonon 1 * * Useassa kohdassa toistuvista virheistä tuli miinuksia, * esimerkiksi Alkuelain-luokan tuntemattomiin muuttujiin * viittaamisesta sakotettiin 2 pistettä. */ public class Alyelain extends Alkuelain { private int äo; // Eläimen älykkyysosamäärä välillä [1, 200]. // Luo älyeläimen annetulla perimällä ja älykkyysosamäärällä. public Alyelain(int[] perimä, int äo) { super(perimä); asetaÄO(äo); } // Asettaa älykkyysosamäärän. Tätä ei vaadittu erikseen, mutta // konstruktorissa annettu äo pitää joka tapauksessa tarkistaa. public void asetaÄO(int äo) { if (äo < 1) { this.äo = 1; } else if (äo > 200) { this.äo = 200; } else { this.äo = äo; } } // Palauttaa älykkyysosamäärän. public int mikäOnÄO() { return äo; } // Palauttaa pariutumisen tuloksena syntyneen jälkeläisen. public Alyelain pariudu(Alyelain toinen) { Alkuelain allu = super.pariudu(toinen); int K = (äo + toinen.äo) / 2; int A, lapsenÄO; if ((perimänSumma() + toinen.perimänSumma()) % 2 == 1) { A = 10; } else { A = -10; } lapsenÄO = (K + A) % 200 + 1; return new Alyelain(allu.mikäOnPerimä(), lapsenÄO); } // Palauttaa älyeläimen merkkijonoesityksen. public String toString() { return super.toString() + " (" + äo + ")"; } // Palauttaa eläimen perimän alkioiden summan. Tätä ei vaadittu // erikseen. private int perimänSumma() { int[] perimä = mikäOnPerimä(); int summa = 0; for (int i = 0; i < perimä.length; ++i) { summa += perimä[i]; } return summa; } }