public static List<Presente> corte(List<Presente> p1, List<Presente> p2, int posCorteInicial, int posCorteFinal, int tamanho) {
        System.out.println("----");
        System.out.println(posCorteInicial + " " + posCorteFinal);
        imprimirPresentes(new Cromossomo(p1));
        imprimirPresentes(new Cromossomo(p2));
        System.out.println("----");
        List<Integer> genesPreDefinidos = new ArrayList<>();

        //int metade = (int) Math.floor(tamanho / 2);
        List<Presente> f1 = new ArrayList<>();
        for (Presente presente : p1) {
            try {
                f1.add(presente.clone());
            } catch (CloneNotSupportedException ex) {
                Logger.getLogger(Cruzamento.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        // int k = 0;
        for (int i = posCorteInicial; i < posCorteFinal; i++) {
            genesPreDefinidos.add(p1.get(i).getId());

        }
        int i = posCorteFinal - posCorteInicial;
        int j = 0;
        for (Presente presente : p2) {
            if (genesPreDefinidos.contains(presente.getId())) {
                continue;
            }
            if (j == posCorteInicial) {
                j = posCorteFinal;
            }
            try {
                f1.set(j, presente.clone());
            } catch (CloneNotSupportedException ex) {
                Logger.getLogger(Cruzamento.class.getName()).log(Level.SEVERE, null, ex);
            }
            j++;
        }
//        while (j < tamanho) {
//            if (!genesPreDefinidos.contains(p2.get(j).getId())) {
//                try {
//                    f1.set(i, p2.get(j).clone());
//                } catch (CloneNotSupportedException ex) {
//                    Logger.getLogger(Cruzamento.class.getName()).log(Level.SEVERE, null, ex);
//                }
//                i++;
//            }
//            j++;
//        }
        imprimirPresentes(new Cromossomo(f1));
        return f1;
    }