gpt4 book ai didi

java - 通过引用复制对象内的二维数组

转载 作者:行者123 更新时间:2023-12-01 18:44:55 25 4
gpt4 key购买 nike

对象1.java:

public class Object1 {
public double[][] var1;
...
}

Object2.java:

public class Object2 {
public double[][] var2;
...
}

我想通过引用(浅复制)将 Object2.var2 复制到 Object1.var1 中。这是我正在尝试的方法,但不起作用:

 Object1 object1 = new Object1();
object1.var1 = new double[2][];
System.arraycopy(object2.var2, 0, object1.var1, 0, object2.var2.length);

有人知道我错在哪里吗?我收到 java.lang.NullPointerException 编译错误。请注意,object2.var2 已填充数据。

更新1:

请注意,object2.var2 是一个 Nx2 矩阵,如下所示:

object2.var2[0][0]=1.232
object2.var2[0][1]=23.233
object2.var2[1][0]=3.23
object2.var2[1][1]=32.12
...
object2.var2[N][0]=3.23
object2.var2[N][1]=32.12

当我尝试以下操作时,我还看到 java.lang.NullPointerException:

object1.var1=new double[object2.var2.length][2];
object1.var1=object2.var2;

最佳答案

即使在原始矩阵中,您也分配了数组的一个维度,但没有分配其他维度!

double var1=new double[2][];//还不够

将矩阵视为数组的数组 - 您分配了数组的数组,但没有分配内部数组本身。如果您希望 2x3 矩阵的第二维为 3,则需要:

for(int i=0 ; i < var1.length; i ++)    var1[i]=new double[3]

现在您的矩阵已分配。副本将以几乎相同的方式进行。

要将 var1 中的任意矩阵复制到 var2,您可能需要:

var2=new double[var1.length][];for(int i=0 ; i < var1.length; i ++){    var2[i]=new double[var1[i]];    System.arraycopy(object2.var2[i], 0, object1.var1[i], 0, object2.var2[i].length);}

我不做这么多,但我认为这是相当准确的。

也就是说,通常有更好的方法。如果您要经常使用矩阵,您可能需要研究一些免费的外部库。

关于java - 通过引用复制对象内的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18199441/

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