2013-10-25 53 views
0

getVariations方法用於獲取整數數組,其中每個數組中包含相同數量的值,但在不同索引中。所有這些組合都被添加到名爲「組合」的數組列表中,並返回數組的數組列表。但是,在主要方法中使用的情況下不返回java中數組的ArrayList

int[] cp1 = { 1,5,4,3,2}; 
    ArrayList<int[]> k1 = sol.getVariations(cp1); 
    for(int n=0; n<5 ; n++){ 
     int[] ab = k1.get(3); 
     System.out.print(ab[n]); 

    } 

k1不包含所需的結果。然而,在這裏找不到我做錯了什麼。 當在這個方法中檢查ArrayList「組合」時,它會給出所需的結果。它包含已更改和添加的數組。但是在方法外部使用方法的返回數組列表不能完成工作。
如果有人能幫忙,請欣賞。

public ArrayList<int[]> getVariations(int[] copy){ 

    int[] cp1 = copy; 
    int[] comb = new int[5]; 
    Boolean b = false; 
    Boolean d = false; 
    Boolean e = false; 
    int m = 0; 
    ArrayList<int[]> combination = new ArrayList<int[]>(); 
    for(int i=0; i<N ; i++){ 
     aloop: for(int j=0; j<N ; j++){ 


      for(int k=0; k<N ; k++){ 


       if(k==i) { 
        b = true; 
        e = true; 
       } 
       if(k==i+1){ 
        d = true; 
        e = false; 
       } 
       if(k==j){ 
        b = false; 
        e = true; 
        continue; 
       } 
       if(b && j>=i) 
        comb[k] = cp1[k+1]; 
       if(!b && j>=i) 
        comb[k] = cp1[k]; 


       if(e && j<i){ 
        comb[k] = cp1[k-1]; 
       } 
       if((j<i || d) && j<i && !e){ 
        comb[k] = cp1[k]; 
       } 

      } 
      comb[j] = cp1[i]; 

      b = false; 
      e = false; 
      d = false; 
      for(int h=0 ; h<N ; h++){ 
       if(comb[h] == cp1[h]){ 
        b = true; 
       } 
       else{ 
        b = false; 
        break; 
       } 


      } 
      if(b){ 
       b = false; 
       continue aloop; 
      } 

      combination.add(m , comb); 
      m++; 
      for(int n=0; n<N ; n++){ 
       int[] ab = combination.get(m-1) ; 
       System.out.print(ab[n]); 

      } 

      System.out.println(""); 

     } 



    } 
    System.out.println(""); 
    return (combination); 
} 
+1

請問您是否可以使用更簡短,更容易理解的示例代碼重現您的問題。恐怕我根本不明白你的問題陳述,上面的代碼不容易恢復工程師... – jwatkins

+0

請提供一些示例輸出。你很難找到你期望的東西。 – Nishant

+0

什麼是N? – Christian

回答

1

您正在向您的ArrayList添加相同的數組comb,ArrayList是您在方法開始時創建的。添加元素通過引用發生,這意味着您的combination對象中的所有條目實際上都是相同的。嘗試在退出getVariations方法之前循環訪問combination對象,您可能會注意到與方法外部相同的行爲。

修復方法是在循環中創建一個comb對象。

public ArrayList<int[]> getVariations(int[] copy){ 

    int[] cp1 = copy; 
    Boolean b = false; 
    Boolean d = false; 
    Boolean e = false; 
    int m = 0; 
    ArrayList<int[]> combination = new ArrayList<int[]>(); 
    for(int i=0; i<N ; i++){ 
     aloop: for(int j=0; j<N ; j++){ 
      int[] comb = new int[5]; 

      for(int k=0; k<N ; k++){ 
       if(k==i) { 
        b = true; 
        e = true; 
       } 
       if(k==i+1){ 
        d = true; 
        e = false; 
       } 
       if(k==j){ 
        b = false; 
        e = true; 
        continue; 
       } 
       if(b && j>=i) 
        comb[k] = cp1[k+1]; 
       if(!b && j>=i) 
        comb[k] = cp1[k]; 


       if(e && j<i){ 
        comb[k] = cp1[k-1]; 
       } 
       if((j<i || d) && j<i && !e){ 
        comb[k] = cp1[k]; 
       } 
      } 
      comb[j] = cp1[i]; 

      b = false; 
      e = false; 
      d = false; 
      for(int h=0 ; h<N ; h++){ 
       if(comb[h] == cp1[h]){ 
        b = true; 
       } 
       else{ 
        b = false; 
        break; 
       } 
      } 
      if(b){ 
       b = false; 
       continue aloop; 
      } 

      combination.add(m , comb); 
      m++; 
      for(int n=0; n<N ; n++){ 
       int[] ab = combination.get(m-1) ; 
       System.out.print(ab[n]); 

      } 
      System.out.println(""); 
     } 
    } 
    System.out.println(""); 
    return (combination); 
} 
+0

謝謝。在循環代碼內創建梳子後工作良好 –

+0

好運更進一步:) – Ashalynd