java - java中不返回数组的ArrayList

标签 java arrays arraylist

getVariations 方法用于获取整数数组,该数组由相同数量的值组成,但索引不同。所有这些组合都添加到称为“组合”的数组列表中,并返回数组的数组列表。但是当它在 main 方法中用作 this 时

    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 不包含所需的结果。但无法找出我在这里做错了什么。 当在此方法内检查数组列表“组合”时,它会给出所需的结果。它包含已更改和添加的数组。但是在方法之外使用方法的返回数组列表无法完成工作。
如果有人可以提供帮助,我们将不胜感激。

    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);
}

最佳答案

您正在将相同的数组 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);
}

关于java - java中不返回数组的ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19596812/

相关文章:

java - 从 ArrayList 中删除具有特定值的项目

java - 尝试从另一个不工作的 ArrayList 中过滤

Java TCP 套接字监听器

java - Jar 文件未加载

python - 将数据从一个 Numpy 数组移动到另一个返回错误数据

c - 奇怪的 C 段错误

java - ArrayList.add(idx,element) 损坏数组的其他元素

java - 如何在 docker 上运行 kurento java web 服务器

java - 刷新后的Whitelabel错误页面

java - 如何将 int [] 转换为大整数?