2013-10-25 3 views
0

Метод getVariations используется для получения целых массивов, которые состоят из одного и того же количества значений в каждом, но в разных индексах. Все эти комбинации добавляются к arraylist под названием «комбинация», и он возвращает arraylist массивов. Но когда это используется в основном методеНе возвращает ArrayList массивов в java

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

Вы добавляете тот же массив comb к вашему ArrayList, который вы создали в начале вашего метода. Добавление элемента происходит по ссылке, это означает, что все записи в вашем объекте combination фактически одинаковы. Попробуйте выполнить цикл над объектом combination непосредственно перед тем, как выйти из метода getVariations, вы, вероятно, заметите то же поведение, что и вне метода.

Исправить будет создание объекта 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

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