public class Alkuelain { protected static int otuslaskuri = 0; protected final int YKSILOLLISYYS; protected static char[] perusemas = {'A','C','G','T'}; protected static final int perimanKoko = 30; protected char[] perima; protected String perimalista; public Alkuelain(){ //luo alkueläimen, jolle arvotaan perimä. this.YKSILOLLISYYS = otuslaskuri; ++Alkuelain.otuslaskuri; this.perima = new char[ perimanKoko]; for (int i=0; i < this.perima.length; ++i){ this.perima[i] = perusemas[(int) Math.random()*4]; } } public Alkuelain(char[] perimaAnnettu){ //luo alkueläimen annetulla perimällä. Määrittele mitä tehdään, jos perimä ei ole kelvollinen. 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]; } for (int i=0; i < this.perima.length; ++i){ this.perima[i] = perimaAnnettu[i]; } } public void mutaatio(){ //aikaansaa aidon mutaation alkueläimen perimään, so. jokin arvottu nukleotidi muuttuu arvotulla tavalla. int j = (int) Math.random()*30; this.perima[j] = perusemas[(int) Math.random()*4]; } public Alkuelain jakaudu(){ //palauttaa arvonaan jakautumalla syntyneen alkueläimen. Huomaa että myös perimätaulukon sisältö on kopioitava! Miksi? return new Alkuelain (this.perima); } public Alkuelain pariudu(Alkuelain toinen){ //tuottaa this-alkueläimen ja parametrina annetun alkueläimen jälkeläisen. 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]; } return new Alkuelain(parit); } public String toString(){ //tuottaa merkkiesityksen alkueläimestä perimalista = new String (perima); return "Alkueläin "+this.YKSILOLLISYYS+".: "+this.perimalista; } }