2010-04-13 15 views
0

Comment mélanger les éléments dans les paires? Le programme ci-dessous, générer toutes les paires possibles et plus tard mélanger les paires. par exemple. paires possibles avant shuffle est ab,ac,ae,af ..etc shuffled à ac,ae,af,ab ... etcComment mélanger des paires

Comment le faire non seulement mélangé par paires mais dans les éléments de la paire elle-même? par exemple. au lieu de ab, ac, comment puis-je faire ba, ac?

String[] pictureFile = {"a.jpg","b.jpg","c.jpg","d.jpg","e.jpg","f.jpg","g.jpg"}; 
    List <String> pic1= Arrays.asList(pictureFile); 
    ... 
ListGenerator pic2= new ListGenerator(pic1); 

ArrayList<ArrayList<Integer>> pic2= new ArrayList<ArrayList<Integer>>(); 


public class ListGenerator { 
    public ListGenerator(List<String> pic1) { 
    int size = pic1.size(); 

    // create a list of all possible combinations 
    for(int i = 0 ; i < size ; i++) { 
     for(int j = (i+1) ; j < size ; j++) { 
      ArrayList<Integer> temp = new ArrayList<Integer>(); 
      temp.add(i); 
      temp.add(j); 
       pic2.add(temp); 
      } 
     } 
     Collections.shuffle(pic2); 
    } 

    //This method return the shuffled list 
    public ArrayList<ArrayList<Integer>> getList() { 
     return pic2; 
    } 
} 

Répondre

1

il vous suffit de mélanger la liste temp avant de l'ajouter à pic2. Voici le code fixe (notez que je me suis tourné la variable pic2 dans un champ de la classe ListGenerator et renommé à result)

String[] pictureFile = {"a.jpg","b.jpg","c.jpg","d.jpg","e.jpg","f.jpg","g.jpg"}; 
    List <String> pic1= Arrays.asList(pictureFile); 
     ... 
    ListGenerator pic2= new ListGenerator(pic1); 

    public class ListGenerator { 

    ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>(); 

    public ListGenerator(List<String> pic1) { 
     int size = pic1.size(); 

     // create a list of all possible combinations 
     for(int i = 0 ; i < size ; i++) { 
      for(int j = (i+1) ; j < size ; j++) { 
       ArrayList<Integer> temp = new ArrayList<Integer>(); 
       temp.add(i); 
       temp.add(j); 

       Collections.shuffle(temp); 
       result.add(temp); 
      } 
     } 
     Collections.shuffle(result); 
    } 

    //This method return the shuffled list 
    public ArrayList<ArrayList<Integer>> getList() { 
     return result; 
    } 
    } 

Cependant c'est juste la première étape vers une solution. Actuellement, chaque paire contiendra des entiers dans la plage [0..size-1] donc vos paires ressemblent à ceci: <0,3>, <1,2>, etc. Ce que vous voulez probablement est d'obtenir une paire qui est une chaîne de deux lettres telles que: "ab", "dc", etc. Dans cette version, je renommé getList() en getPairs() qui exprime mieux son sens. De plus, je fait le constructeur de ListGenerator accepter un tableau de caractères de sorte que vous avez juste besoin de l'appeler avec vos caractères souhaités, comme suit:

List<String> pairs = new ListGenerator('a', 'b', 'c', 'd', 'e', 'f', 'g').getPairs(); 

Et voici ListGenerator elle-même:

public class ListGenerator { 

    ArrayList<String> result = new ArrayList<String>(); 

    public ListGenerator(char... letters) { 
     int size = letters.length; 

     // create a list of all possible combinations 
     for(int i = 0 ; i < size ; i++) { 
      for(int j = (i+1) ; j < size ; j++) { 
       ArrayList<Character> temp = new ArrayList<Character>(); 
       temp.add(letters[i]); 
       temp.add(letters[j]); 

       Collections.shuffle(temp); 
       result.add("" + temp[0] + temp[1]); 
      } 
     } 
     Collections.shuffle(result); 
    } 

    //This method return the shuffled list 
    public ArrayList<ArrayList<Integer>> getPairs() { 
     return result; 
    } 
    } 
+0

Merci Italie :-) – Jessy

0

Entre Nous que vous avez ces objets:

Red dress 
Blue shirt 
Pink panties 

et vous voulez mélanger les couleurs et les articles de habillements pour obtenir des choses comme:

Pink shirt 
Blue panties 
... etc 

Comment faites-vous?

C'est simple, vraiment: mélangez simplement la liste des couleurs et des articles de vêtements séparément, puis joignez-les à nouveau.

Red, Blue, Pink   --> Pink, Blue, Red 
dress, shirt, panties  --> shirt, panties, dress 
           ------------------------ pair 
           Pink shirt 
           Blue panties 
           Red dress