Вам просто нужно перетасовать список 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;
}
}