不';t返回java中数组的ArrayList

不';t返回java中数组的ArrayList,java,arrays,arraylist,Java,Arrays,Arraylist,getVariations方法用于获取整数数组,该数组由每个数组中相同数量的值组成,但索引不同。所有这些组合都添加到名为“组合”的arraylist中,并返回数组的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

getVariations方法用于获取整数数组,该数组由每个数组中相同数量的值组成,但索引不同。所有这些组合都添加到名为“组合”的arraylist中,并返回数组的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]);

    }
int[]cp1={1,5,4,3,2};
ArrayList k1=sol.getVariations(cp1);

对于(int n=0;n您正在向ArrayList添加相同的数组
comb
,该数组是您在方法开始时创建的。添加元素是通过引用进行的,这意味着您的
组合
对象中的所有条目实际上都是相同的。请在退出
组合之前尝试在
对象上循环e> getVariations
method,您可能会注意到与该方法外部相同的行为

解决方法是在循环中创建一个
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);
}
public ArrayList getVariations(int[]copy){
int[]cp1=复制;
布尔b=假;
布尔d=假;
布尔e=false;
int m=0;
ArrayList组合=新的ArrayList();

对于(int i=0;我能不能请你用一个更简短、更容易理解的示例代码来重现你的问题。恐怕我根本不理解你的问题陈述,而且上面的代码不容易还原工程师…请提供一些示例输出。你希望从中得到什么很难找到。N=5。它取自一个输入文件谢谢.在循环内创建梳后,代码工作正常
    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);
}