【发布时间】:2016-10-05 05:48:17
【问题描述】:
我的课堂上有以下代码:
public static ArrayList<String[]> allCombos;
public static void main(String[] args){
allCombos = new ArrayList<String[]>();
String[] arr = {"A","B","C","D","E","F"};
combinations(arr, 3, 0, new String[3]);
}
static void combinations(String[] arr, int len, int startPosition, String[] result){
if (len == 0){
allCombos.add(result); // this is where the problem seems to be
return;
}
for (int i = startPosition; i <= arr.length-len; i++){
result[result.length - len] = arr[i];
combinations(arr, len-1, i+1, result);
}
}
由于某种原因,每次在combinations() 中调用allCombos.add(result) 时,该方法似乎将整个数组中的每个元素都设置为结果的当前值,从而覆盖了combinations() 的先前迭代已将最近添加的 allCombos 值设置为。如果allCombos 是Vector,也会发生同样的事情。
谁能告诉我为什么会发生这种情况以及如何解决它?
【问题讨论】:
-
您只使用
String[]的一个实例,因此导致此实例在List中出现多次,而只有此String[]被多次修改。
标签: java recursion arraylist add combinations