如何改变成对中的元素?
下面的程序,生成所有可能的对,然后将这些对洗牌。
例如shuffle之前的可能对是ab,ac,ae,af
..等等,随机转移到ac,ae,af,ab
...等等
如何使它不仅成对地混乱,而且在对子本身的元素内?
例如而不是ab, ac,
如何制作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;
}
}
答案 0 :(得分:1)
在将temp
列表添加到pic2
之前,您只需将其重新排列。以下是固定代码(请注意,我将pic2
变量转换为ListGenerator
类的字段并将其重命名为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;
}
}
然而,这只是迈向解决方案的第一步。目前,每对都将包含[0..size-1]
范围内的整数,因此您的对看起来像这样:<0,3>
,<1,2>
等。您可能想要的是获得两个字母的对字符串,例如:"ab", "dc"
等。在此版本中,我将getList()
重命名为getPairs()
,以更好地传达其含义。另外,我使ListGenerator
的构造函数接受了一个字符数组,所以你只需要用你想要的字符来调用它,如下所示:
List<String> pairs = new ListGenerator('a', 'b', 'c', 'd', 'e', 'f', 'g').getPairs();
这是ListGenerator
自我:
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;
}
}
答案 1 :(得分:0)
假设您有这些对象:
Red dress
Blue shirt
Pink panties
你想要将衣服的颜色和物品洗牌,以便得到类似的东西:
Pink shirt
Blue panties
... etc
你是怎么做到的?
这很简单,真的:只是将颜色和衣物的名单分开洗牌,然后再加入。
Red, Blue, Pink --> Pink, Blue, Red
dress, shirt, panties --> shirt, panties, dress
------------------------ pair
Pink shirt
Blue panties
Red dress