package Crossovers;

import GAutilities.*;
import Chromosomes.*;

/*
 * Pick a point at random between 1 and chromosomeLength-1 (inclusive),
 * then exchange all genes at positions 0 to point-1 (inclusive) between
 * the two chromosomes being crossed over.
 */
public class OnePointCrossover implements Crossover {

   public void xOver(Chromosome one, Chromosome two) {

      int point; // crossover point
      int chromLen = Chromosome.getChromosomeLength();
      Number temp;

      if (chromLen > 1) { // select crossover point
         if (chromLen == 2) point = 1;
         else point = MyRandom.intRandom(chromLen-1);
         for (int i = 0; i < point; i++) {
            temp = one.getGene(i);
            one.setGene(i, two.getGene(i));
            two.setGene(i, temp);
         }
         if (Debug.flag) {
            Globals.stdout.println("OnePointCrossover: just crossed at " + point);
         }
      }
   }
}
