public class Tossuelain extends Alkuelain{ private char sukupuoli; private String spuoli; public Tossuelain(){ //luo tohvelieläimen, jolle arvotaan perimä. super(); this.sukupuoli = perusemas[(int) Math.random()*4]; } public Tossuelain(char[] perimaAnnettu){ //luo tohvelieläimen annetulla perimällä. Ottaa sisäänsä 31-alkioisen taulukon ja määrää siitä viimeisen alkion sukupuoleksi. super(perimaAnnettu); this.sukupuoli = perimaAnnettu[perimaAnnettu.length-1]; } public Tossuelain pariudu(Tossuelain toinen) { //palauttaa arvonaan joko jälkeläisen tai arvon null. if (((this.sukupuoli == 'A') && (toinen.sukupuoli == 'G' || toinen.sukupuoli == 'T')) || ((this.sukupuoli == 'C') && (toinen.sukupuoli == 'G' || toinen.sukupuoli == 'T')) ||((this.sukupuoli == 'G') && (toinen.sukupuoli == 'C' || toinen.sukupuoli == 'A')) ||((this.sukupuoli == 'T') && (toinen.sukupuoli == 'C' || toinen.sukupuoli == 'A'))){ char[] parit = new char[ perimanKoko]; for (int i=0; i < parit.length; ++i){ if (Math.random()<0.5) parit[i] = toinen.perima[i]; else parit[i] = this.perima[i]; } if (this.sukupuoli == 'A') { if (toinen.sukupuoli == 'G') parit[parit.length-1] = 'A'; else if (toinen.sukupuoli == 'T') parit[parit.length-1] = 'C'; } if (this.sukupuoli == 'C') { if (toinen.sukupuoli == 'G') parit[parit.length-1] = 'G'; else if (toinen.sukupuoli == 'T') parit[parit.length-1] = 'T'; } if (this.sukupuoli == 'T') { if (toinen.sukupuoli == 'A') parit[parit.length-1] = 'C'; else if (toinen.sukupuoli == 'C') parit[parit.length-1] = 'T'; } if (this.sukupuoli == 'G') { if (toinen.sukupuoli == 'C') parit[parit.length-1] = 'G'; else if (toinen.sukupuoli == 'A') parit[parit.length-1] = 'A'; } return new Tossuelain(parit); } else return null; } public char vaihdaNukleotidi(int indeksi, char uusi) { //vaihtaa tossueläimen yhden nukleotidin toiseksi kohdasta indeksi. Arvonaan metodi palauttaa vanhan, korvatun nukleotidin. Määrittele, mitä tehdään, jos parametrit ovat virheellisiä. if (indeksi > this.perima.length) //pidetään indeksi sallituissa rajoissa indeksi = this.perima.length; else if (indeksi < 0) indeksi = 0; if (uusi != 'A' || uusi != 'C' || uusi != 'G' || uusi !='T') uusi = perusemas[(int) Math.random()*4]; if (indeksi == this.perima.length){//if int indeksi == 30 ...muuttaa sukupuolinukleotidiä. //char vanha = this.sukupuoli; toimiiko? this.sukupuoli = uusi;} else{ //char vanha = this.perima[indeksi]; this.perima[indeksi] = uusi;} return 'A'; //vanha; pitäisi keksiä miten saisi järkevästi palautettua vanhan arvon } public String toString() { //muodostaa selkeän merkkiesityksen tossueläimestä. if ((this.sukupuoli == 'A') || (this.sukupuoli == 'C')) // A- ja C-tossut naaraita, G- ja T-tossut koiraita spuoli = "naaras"; else if ((this.sukupuoli == 'G') || (this.sukupuoli == 'T')) spuoli = "koiras"; return "Tohvelieläin "+this.YKSILOLLISYYS+".: "+this.perimalista+this.sukupuoli+" "+this.spuoli; } public static void main(String[] args) { char[]testi = {'G','A','T','T','A','C','A','G','A','T','T','A','C','A','G','A','T','T','A','C','A','G','A','T','T','A','C','A','G','A','T'}; char[]testi2 = {'T','T','A','C','A','G','A','T','T','A','C','A','G','A','T','T','A','C','A','G','A','T','T','A','C','A','G','A','T','T','A'}; Tossuelain tossu1 = new Tossuelain(); System.out.println(tossu1); Tossuelain tossu2 = new Tossuelain(); System.out.println(tossu2); Tossuelain tossu3 = new Tossuelain(testi); System.out.println(tossu3); Tossuelain tossu4 = new Tossuelain(testi2); System.out.println(tossu4); Tossuelain tossu5 = tossu1.pariudu(tossu2); System.out.println(tossu5); Tossuelain tossu6 = tossu4.pariudu(tossu5); System.out.println(tossu6); tossu2.vaihdaNukleotidi(0, 'A'); System.out.println(tossu2); } }