mardi 10 mars 2015

Recursives, exporting info at each step



I'm working on code that outputs all combinations of an string array. I can print an array using the doCombine method, but when it comes to add that array to the LinkedList, it adds arrays containing only Ds. How can I pass each array to my list?



public LinkedList<String[]> allCombinations = new LinkedList<String[]>();

public static void main(String[] args) {
String[] arr = {"A", "B", "C", "D"};

Combinations c = new Combinations();

c.combine(arr, 0);
c.combine(arr, 1);
c.combine(arr, 2);
c.combine(arr, 3);
c.combine(arr, 4);
c.printList();

}

private void combine(String[] arr, int r) {
String[] res = new String[r];
doCombine(arr, res, 0, 0, r);
}

private void doCombine(String[] arr, String[] res, int currIndex, int level, int r) {
if (level == r) {

printArray(res);
//Here it doesn't work
allCombinations.add(res);
return;
}
for (int i = currIndex; i < arr.length; i++) {
res[level] = arr[i];
doCombine(arr, res, i + 1, level + 1, r);

if (i < arr.length - 1 && arr[i].equals(arr[i + 1])) {
i++;
}
}
}

private void printArray(String[] res) {

for (int i = 0; i < res.length; i++) {
System.out.print(res[i] + " ");
}
System.out.println();
}

public void printList() {
for (int i = 0; i < allCombinations.size(); i++) {
printArray(allCombinations.get(i));
}

}



Aucun commentaire:

Enregistrer un commentaire