2015-05-04 73 views
1

我想在遞歸函數中使用ArrayList。 我正在嘗試查找大小爲r的數組arr的組合。就像如果我有一個數組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()私人靜態無效printArray(字符串[] res){int i = 0;我 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 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

如果您的問題已解決,請接受答案,以免在未答覆的部分顯示此問題。 –