Question

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

Comment faire non seulement brassé 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;
    }
}
Était-ce utile?

La solution

Il vous suffit de mélanger la liste de 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. À l'heure actuelle, chaque paire contiendra des entiers dans la gamme [0..size-1] afin que vos paires ressemblent à ceci: <0,3>, <1,2>, etc. Ce que vous voulez sans doute est d'obtenir une paire qui sont cordes à deux lettres telles que: "ab", "dc", etc. Dans cette version I renomme getList() à getPairs() qui véhiculent son sens mieux. De plus, je fait le constructeur de ListGenerator accepter un tableau de caractères afin 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;
     }
  }

Autres conseils

Le mot Let 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?

Il est simple, vraiment. Juste lecture aléatoire la liste des couleurs et des articles de vêtements séparément, puis les joindre à nouveau

Red, Blue, Pink            -->  Pink, Blue, Red
dress, shirt, panties      -->  shirt, panties, dress
                               ------------------------ pair
                                Pink shirt
                                Blue panties
                                Red dress
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top