2015-05-04 2 views
1

Я пытаюсь использовать 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); 
    } 
} 

Пожалуйста скажите мне, что я делаю неправильно.

+0

Редактировать: Я не знаю размер комбинаций, в которых я нуждаюсь. т.е. здесь я привел пример для 3, мне может понадобиться 2 или 4 или 5 – SidSel

+0

Редактировать 2: Вот мой printArray() private static void printArray (String [] res) { for (int i = 0; i SidSel

+0

Редактировать 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

ответ

0

Изменить код

String[] inter = new String[r]; 
    inter = res; 
    result.add(inter); 

в

 String[] inter = new String[r]; 
     int k=0; 
     for(String s:res){ 
      inter[k] = s; 
      k++; 
     } 
     result.add(inter); 

И работы кода, как ожидается.

Выход:

А Б

A B C

A B D

A B C

A B D

A C D

A B C

A B D

A C D

B C D

+0

Гоша, не изобретайте велосипед: ['System.arraycopy'] (https://docs.oracle.com/javase/7/docs/api/java/lang/System.html#arraycopy (java.lang. Объект,% 20int,% 20java.lang.Object,% 20int,% 20int)) –

+0

Большое спасибо. Это сработало. – SidSel

+0

Примите ответ, если ваша проблема решена, чтобы этот вопрос не отображался в неотвеченном разделе. –

Смежные вопросы