add(element) 方法将数组中的每个元素更改为元素?
The add(elem) method changes every element in my array to elem?
我的 class 中有以下代码:
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
.
,也会发生同样的事情
谁能告诉我为什么会这样,我该如何解决?
您多次将相同的 result
数组添加到 ArrayList
,因此您的 ArrayList
包含对同一数组对象的多个引用。
您应该创建数组的副本,以便 ArrayList
包含不同的数组。
改变
allCombos.add(result);
到
allCombos.add(Arrays.copyOf(result,result.length));
进行更改后,打印您的 allCombos
List
会得到:
[A, B, C]
[A, B, D]
[A, B, E]
[A, B, F]
[A, C, D]
[A, C, E]
[A, C, F]
[A, D, E]
[A, D, F]
[A, E, F]
[B, C, D]
[B, C, E]
[B, C, F]
[B, D, E]
[B, D, F]
[B, E, F]
[C, D, E]
[C, D, F]
[C, E, F]
[D, E, F]
我的 class 中有以下代码:
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
.
谁能告诉我为什么会这样,我该如何解决?
您多次将相同的 result
数组添加到 ArrayList
,因此您的 ArrayList
包含对同一数组对象的多个引用。
您应该创建数组的副本,以便 ArrayList
包含不同的数组。
改变
allCombos.add(result);
到
allCombos.add(Arrays.copyOf(result,result.length));
进行更改后,打印您的 allCombos
List
会得到:
[A, B, C]
[A, B, D]
[A, B, E]
[A, B, F]
[A, C, D]
[A, C, E]
[A, C, F]
[A, D, E]
[A, D, F]
[A, E, F]
[B, C, D]
[B, C, E]
[B, C, F]
[B, D, E]
[B, D, F]
[B, E, F]
[C, D, E]
[C, D, F]
[C, E, F]
[D, E, F]