/* Tehtävä 2: Älyeläin (14 pistettä), arvostellut Mikko Heimola Arvosteluperusteet: -Jokaisesta oleellisesta virheestä (unohdettu extends -määre, äo:n rajojen tarkistus, syntaksi todella kummallista (välitetty metodikutsussa myös parametrien tyypit), tehty perimä-taulukko tähänkin luokkaan ilmentymämuuttujaksi, esitelty esim. K ja A ilmentymämuuttujina, toteutettu itse _käytössä jo oleva_ Alkueläin-luokka) on otettu yksi piste pois, isommista kaksikin. -Vakavampia virheitä ovat olleet konstruktorin super-kutsujen kanssa kämmeltäminen tai muut perinnän toimintalogiikan selkeät väärinymmärtämiset (esim. esitelty Alkueläin/Älyeläin -tyyppinen muuttuja johon on talletettu super-kutsun palautusarvo) sekä paridu-metodissa yliluokan vastaavan metodin virheelinen hyödyntäminen. Nämä ovat virheen laajuudesta riippuen maksaneet 2-6 pistettä. -Sisennyksen täydellinen puute on maksanut kolme pistettä. Kirjoitusvirheistä tai muista pienistä syntaksierheistä ei ole verotettu pisteitä, kuten ei myöskään (hyvin tavallisesta) virheestä pyöristää K alaspäin sijoittamalla jakolaskun tulos suoraan int-muuttujaan. Täysin kaavamaista pisteytys ei kuitenkaan voinut olla - usein yksi virhe sai aikaan toisen ja sitä seuraavan, tai ratkaisun ajatuskulku oli hahmotettavissa mutta lopputulos jotain muuta kuin Javaa... */ public class Alyelain extends Alkuelain { private int äo; public Alyelain(int[] perima, int äo) { super(perima); // Epäkelpoon äo-arvoon voi suhtautua usealla eri tavalla. // Tämä ei ole ainoa oikea (hyväksyttävä) vaihtoehto. if (äo < 1) this.äo = 1; else if (äo > 200) this.äo = 200; else this.äo = äo; } public int mikäOnÄO() { return this.äo; } public Alyelain pariudu(Alyelain toinen) { int k, a, äo; k = Math.round((this.mikäOnÄO() + toinen.mikäOnÄO()) / 2); int[] isänPerimä = this.mikäOnPerimä(), äidinPerimä = toinen.mikäOnPerimä(); int isänSumma = 0, äidinSumma = 0; for (int i = 0; i < isänPerimä.length; i++) { isänSumma += isänPerimä[i]; äidinSumma += äidinPerimä[i]; } if (isänSumma % 2 == äidinSumma % 2) a = -10; else a = 10; äo = (k + a) % 200 + 1; Alkuelain hylkylapsi = super.pariudu(toinen); return new Alyelain(hylkylapsi.mikäOnPerimä(), äo); } public String toString() { return super.toString() + " (" + this.äo + ")"; } }