我无法弄清楚为什么"ALofcompoundedPrimeAL"(ArrayList的ArrayList)中的每个元素最终每个元素都是相同的。因此,虽然 ArrayList "theNewPrimeFactorsAL" 看起来是正确的,但 for 循环的每次迭代似乎都会将 ALofcompoundedPrimeAL 的所有元素更改为最新版本的元素;也就是说,ALofcompoundedPrimeAL没有索引唯一元素,而是将每个元素更改为最后一次循环迭代的值。 另外,我会使用正确的工具来存储套装吗?重要的是,我可以计算每次迭代的素因数数量,因此不能只用可能的新素数除数创建一个新集合。
我发现这个:链接显然有效,但似乎无法循环不将 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);
}
感谢您的任何见解。
似乎你只是复制引用。 例如,将theNewPrimeFactorsAL
添加到 ALofcompoundedPrimeAL
后,继续在下一个循环中addAll
到同一theNewPrimeFactorsAL
。 最后,ALofcompoundedPrimeAL
包含对同一theNewPrimeFactorsAL
的n个引用,它包含循环的任何迭代中添加的所有元素。
您需要创建新列表才能拥有新列表。