public class Tossuelain extends Alkuelain{ private char sukupuoli; private String spuoli; public Tossuelain(){ //luo tohvelieläimen, jolle arvotaan perimä. //super(); ?? this.YKSILOLLISYYS = otuslaskuri; ++Alkuelain.otuslaskuri; this.perima = new char[ perimanKoko]; this.sukupuoli = perusemas[(int) Math.random()*4]; for (int i=0; i < this.perima.length; ++i){ this.perima[i] = 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. this.YKSILOLLISYYS = otuslaskuri; ++Alkuelain.otuslaskuri; this.perima = new char[ perimanKoko]; for (int i=0; i < perimaAnnettu.length; ++i){ if (perimaAnnettu[i] != 'A' || perimaAnnettu[i] != 'C' || perimaAnnettu[i] != 'G' || perimaAnnettu[i] != 'T') perimaAnnettu[i] = perusemas[(int) Math.random()*4]; } this.sukupuoli = perimaAnnettu[perimaAnnettu.length-1]; for (int i=0; i < this.perima.length; ++i){ this.perima[i] = perimaAnnettu[i]; } } public Tossuelain pariudu(Tossuelain toinen) { //palauttaa arvonaan joko jälkeläisen tai arvon null. char[] parit = new char[perimanKoko+1]; for (int i=0; i < parit.length-1; ++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'; return new Tossuelain(parit); } if (this.sukupuoli == 'C') { if (toinen.sukupuoli == 'G') parit[parit.length-1]= 'G'; else if (toinen.sukupuoli == 'T') parit[parit.length-1] = 'T'; return new Tossuelain(parit); } if (this.sukupuoli == 'T') { if (toinen.sukupuoli == 'A') parit[parit.length-1]= 'C'; else if (toinen.sukupuoli == 'C') parit[parit.length-1] = 'T'; return new Tossuelain(parit); } 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); } if (parit[parit.length-1]!= 'A' || parit[parit.length-1]!= 'C'|| parit[parit.length-1]!= 'G' || parit[parit.length-1]!= 'T'){ return null; //tarvitseekohan mainita edes edellisten iffittelyiden jälkeen? } } 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 (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 //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; } }