循环元素ArrayList的ArrayLists元素被更改为上一个循环值

时间:2015-01-13 15:47:37

标签: java arraylist multidimensional-array

我无法弄清楚为什么作为ArrayList的ArrayList的“ALofcompoundedPrimeAL”中的每个元素最终都与每个元素相同。因此,虽然ArrayList“theNewPrimeFactorsAL”看起来是正确的,但for循环的每次迭代似乎都将ALofcompoundedPrimeAL的所有元素都更改为最新迭代的元素;即ALofcompoundedPrimeAL不索引唯一元素,而是将每个元素更改为最后一个循环迭代的值。作为额外的,我会使用正确的工具来存储套装吗?重要的是,我可以计算从迭代到迭代的素数因子的数量,因此不能只使用可能的新素数除数来创建一个新的集合。

我发现这个:link显然有效,但似乎无法循环,不能将ALofcompoundedPrimeAL中的每个元素更新为最后一次迭代的值。

public ArrayList<ArrayList<Integer>> CompoundDivisors(
        ArrayList<Set<Integer>> SetofallPrimeFactorsAL) {

    Set<Integer> PrimeFactorsSET;
    ArrayList<Integer> theNewPrimeFactorsAL = new ArrayList<Integer>();
    ArrayList<ArrayList<Integer>> ALofcompoundedPrimeAL = new ArrayList<ArrayList<Integer>>();

    ArrayList<Integer> thePrimeFactorsAL;
    for (int k = 0; k < SetofallPrimeFactorsAL.size(); k++) {
        PrimeFactorsSET = SetofallPrimeFactorsAL.get(k);
        // PrimeFactorsAL takes the set of Prime Factors (in
        // PrimeFactorsSET) and outputs an arraylist of them.
        thePrimeFactorsAL = new ArrayList<Integer>(PrimeFactorsSET);
        // theNewPrimeFactorsAL.addAll just adds all of the new elements to
        // the theNewPrimeFactorsAL ArrayList.
        theNewPrimeFactorsAL.addAll(thePrimeFactorsAL);
        // ALofcompoundedPrimeAL is supposed to add theNewPrimeFactorsAL to
        // each index.
        ALofcompoundedPrimeAL.add(theNewPrimeFactorsAL);
    }
    return (ALofcompoundedPrimeAL);
}

感谢您的任何见解。

1 个答案:

答案 0 :(得分:1)

似乎你只是复制参考文献。例如,在您向theNewPrimeFactorsAL添加ALofcompoundedPrimeAL后,您将在下一个循环中继续addAll到同一theNewPrimeFactorsAL。最后,ALofcompoundedPrimeAL包含对同一theNewPrimeFactorsAL n 引用,它包含在循环的任何迭代中添加到其中的所有元素。

您需要创建新列表才能拥有新列表。