Comment mélanger les paires
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;
}
}
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