Я пытаюсь использовать ArrayList в рекурсивной функции. Я пытаюсь найти комбинации массива arr размера r. Как, если у меня есть массивArrayList из массивов получает перезаписывается каждый раз
["A","B","C","D"]
Я хочу напечатать:
A B C
A B D
A C D
B C D
Но когда я печатаю мой ArrayList в рекурсивной функции дает:
Call1 : ABC
Call2 : ABD
ABD
И так далее. т.е. каждый раз, когда предыдущее содержимое ArrayList
перезаписывается новым контентом, а новый контент также добавляется в конец. Также в функции, вызывающей рекурсивную функцию, мой ArrayList не возвращается, он просто содержит список Es.
В функции вызова рекурсивной функции у меня есть что-то вроде
private static void combine(String[] arr, int r) {
String[] res = new String[r];
ArrayList<String[]> result = new ArrayList<String[]>();
doCombine(arr, res, 0, 0, r, result);
System.out.println("\nIn main" + result.size());
for (Object[] array : result) {
for (Object o : array)
System.out.print("item: " + o);
System.out.println();
}
}
// This recursive function finds combinations
private static void doCombine(String[] arr, String[] res, int currIndex,
int level, int r, ArrayList<String[]> result) {
if (level == r) {
printArray(res);
String[] inter = new String[r];
inter = res;
result.add(inter);
// Tryinh to see wht the array list has every time
for (Object[] array : result) {
for (Object o : array) {
System.out.print("item: " + o);
}
System.out.println();
}
inter = null;
return;
}
for (int i = currIndex; i < arr.length; i++) {
counter.add();
res[level] = arr[i];
doCombine(arr, res, i + 1, level + 1, r, result);
}
}
Пожалуйста скажите мне, что я делаю неправильно.
Редактировать: Я не знаю размер комбинаций, в которых я нуждаюсь. т.е. здесь я привел пример для 3, мне может понадобиться 2 или 4 или 5 – SidSel
Редактировать 2: Вот мой printArray() private static void printArray (String [] res) { for (int i = 0; i
SidSel
Редактировать 3: Я создал счетчик классов, чтобы подсчитать количество найденных комбинаций. Вот код для этого: переменная класса { public int count; переменная (int a) { this.count = a; \t } public void add() { this.count ++; \t } public void print() { \t System.out.println ("Counter is" + this.count); } } – SidSel