gpt4 book ai didi

java - 插入新记录时,列表将覆盖先前添加的记录

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:39:03 24 4
gpt4 key购买 nike

我有一个 Java 代码,其中有一个基本上存储 long[] 数组的列表。在 for 循环中,long[] 数组每次都会更新(如果满足某些条件)并将其添加到列表中。将新数组添加到 List 时,将修改先前添加的数组内容。如何获得包含我添加到其中的确切内容的列表?感谢您的建议。谢谢!

我的代码:[可以执行]

import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
public class MyClass {
public static void main(String args[]) {
removNb(26);
}
public static List<long[]> removNb(long n) {
if(n<1100){
long sum = 0;
long[] pairs_current = new long[2];
List<long[]> list_all = new ArrayList<>();
for (long i=1; i<=n; i++){
sum+= i;
}
for (long j=1; j<=n;j++){
for (long k=1; k<=n;k++){
if(j*k == sum-(j+k)){
//System.out.println("j:"+j+" k:"+k);
pairs_current[0] = j;
pairs_current[1] = k;
list_all.add(pairs_current);
System.out.println("pairs_current:"+Arrays.toString(pairs_current));
System.out.println("list_all:"+Arrays.deepToString(list_all.toArray()));
}
}
}
return list_all;
}
else {
return null;
}
}
}

下面是预期的输出:

pairs_current:[15, 21]
list_all:[[15, 21]]
pairs_current:[21, 15]
list_all:[[15, 21], [21, 15]]

但我得到下面的回应(你可以看到第一条记录也被修改):

 pairs_current:[15, 21]
list_all:[[15, 21]]
pairs_current:[21, 15]
list_all:[[21, 15], [21, 15]]

最佳答案

一个常见的错误。将 pairs_current 的构造移动到内部 if 语句...

                if(j*k == sum-(j+k)){
//System.out.println("j:"+j+" k:"+k);
long[] pairs_current = new long[2];
pairs_current[0] = j;
pairs_current[1] = k;
list_all.add(pairs_current);
System.out.println("pairs_current:"+Arrays.toString(pairs_current));
System.out.println("list_all:"+Arrays.deepToString(list_all.toArray()));
}

您在方法的顶部创建了长数组,因此只有一个数组。您将相同的数组重新添加到列表中,然后在下一个循环中更改其中的值。所以列表有多个条目,但它们都指向同一个数组。

通常,最好在您要使用它们的范围内构造对象。

关于java - 插入新记录时,列表将覆盖先前添加的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47427038/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com