import java.util.ArrayList; import java.util.Collections; /** * * @author GodConan */ public class Substitution { Object[] vars = {"x","y","z"}; Object[] values = {"A","B","C"}; int count = 0; public static void main(String[] args) { new Substitution().compute(); } public Substitution() {} public void compute() { try { ArrayList<MonCouple> listeCouples = new ArrayList(); findLists( listeCouples, 0 ); System.out.println(" --- fin --- avec " + count + " resultats " ); } catch ( Exception e ) { System.out.println("Erreur :" + e); } } public void findLists( ArrayList<MonCouple> liste, int idx ) { for ( int i = 0; i < values.length; i++ ) { ArrayList<MonCouple> listeCouples = new ArrayList( liste ); listeCouples.add( new MonCouple(vars[idx], values[i]) ); if ( idx < ( vars.length - 1 ) ) findLists( listeCouples, idx + 1 ); else { count++; System.out.println( listeCouples.toString() ); } listeCouples.clear(); // ca sert pas vraiment :o) listeCouples = null; // ces 2 ligne sont la pour forcer le non réferencement des objets // normalement ca se fait tout seul ;o) } } public class MonCouple { Object var = null; Object value = null; MonCouple( Object var , Object value ) { this.var = var; this.value = value; } @Override public String toString() { return " ( " + var.toString() + " , " + value.toString() + " ) "; } } }
for( Terme constX : lConst ) { for( Terme constY : lConst ) { //for(int i=0;i<lVar.size();i++) // pour chaque variable { System.out.println("Couple : "+lVar.get(0)+","+constX); System.out.print(" "+lVar.get(1)+","+constY); } } }
{ List couples = new List(); findList( couples, 0); } void findList( couples, int i ) { For ( Term const : lConst ) { List couples = new List( couples ); couples.add( lVar.get(i), const ); if ( i < (lVar.size -1)) findList( couples, i+1 ); else { // ben on est arrivé au bout d une serie de couple c est donc la que // tu fais ce que tu as a faire sur ta liste de couple //un truc du genre : listeSubstitutions.add(new Substitution(couples)); } couples.dispose(); couples = null; } }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionpublic void Generer() { ArrayList<CoupleTermes> alTerme = new ArrayList<CoupleTermes> // On créer une nouvelle AL de CoupleTerme (1 couple de terme c'est par exemple (x,poire)) GenererRecursif(alTerme,0) // appel à la méthode récursive } public void GenererRecursif(ArrayList<CoupleTermes> couples, int i) { for(int j=0;j<lConst.size();j++) // pour chaque constante dans ma liste de constantes { ArrayList<CoupleTermes> lcouples = new ArrayList<CoupleTermes>(); // 1 seconde liste de couple de termes lcouples.add(new CoupleTermes(lVar.get(i), lConst.get(j))); // j'ajoute à cette liste le couple (variable courante, constante courante) System.out.println("Couple "+lVar.get(i)+","+lConst.get(j)); // EN FAIT, ICI LE BUT EST D'AVOIR UNE LISTE DE SUBSTITUTION lcouples contiendrait alors par exemple (x,poire)(y,poire)(z,poire) if ( i<(lVar.size()-1)) GenererAllRec(couples,i+1); // appel récursif else { // ben on est arrivé au bout d une serie de couple c est donc la que // tu fais ce que tu as a faire sur ta liste de couple //un truc du genre : // ICI ON A GENERER UNE SUBSTITUTION A PART ENTIERE ( on a donc trois couples dans lcouples pour mon exemple (x,poire)(y,poire)(z,poire) // ON AJOUTE ALORS CETTE SUBSTITUTION COMPLETE A UNE LISTE DE SUBSTITUTION listeSubstitutions.add(new Substitution(lcouples)); //ICI on a ajouté à listeSubstitutions la liste [(x,poire)(y,poire(z,poire)] //PUIS, on recommencera avec la liste [(x,poire)(y,poire),(z,pomme)] //Puis avec [(x,poire)(y,poire),(z,abricot)]; puis [(x,poire)(y,pomme),(z,poire)], etc... } couples = null; // ça je ne vois pas trop à quoi ça sert) } } // Le problème c'est que avec cet algo, je n'ai pas lcouples qui contient mes 3 couples de termes (x,poire)(y,poire)(z,poire) mais uniquement un seul des 3.