如何将多维整数数组复制到另一个数组中

时间:2014-02-13 18:19:46

标签: java arrays multidimensional-array

所以我有这段代码

public class Filter {
   int[][] sourceImage;

public Filter(int[][] image) {

    // TODO store values to sourceImage
   }
}

我想要做的就是将传递给image的值存储到sourceImage中。有人可以帮我解决这个问题吗?谢谢。

5 个答案:

答案 0 :(得分:1)

最简单的方法就是做

sourceimage = image;

请注意,这会复制对数组的引用,因此sourceimage和传递到filter()方法的引用都将指向同一个数组。从两个引用都可以看到对数组所做的任何更改。

答案 1 :(得分:1)

如果sourceImage必须是不同的数组,您可以遍历两个维度并复制每个项目:

sourceImage = new int[image.length][]; // Initialize the first dimension.
for (int i=0; i<sourceImage.length; i++) {
    sourceImage[i] = new int[image[i].length]; // Initialize the 2nd dimension.
    for (int j=0; j<sourceImage[i].length; j++) {
        sourceImage[i][j] = image[i][j]; // Copy each value.
    }
}

使用System.arraycopy可以更快地完成此操作,但显式循环更适合学习: - )

如果对象的sourceImage 与传递给构造函数的相同的数组是可以的,那么您可以简单地分配它。这样做意味着对其中一个数组(imagesourceImage)的任何更改都会影响它们,因为它们只是对同一个数组对象的两个引用。

sourceImage = image;

答案 2 :(得分:1)

sourceImage = new int[image.length][];
for (int i=0; i<image.length; i++) {
    sourceImage[i] = Arrays.copyOf(image[i],image[i].length);
}

答案 3 :(得分:0)

您所要做的就是使用Arrays.copyOf()方法,以便将image [] []的值复制到sourceImage [] []

public class Filter {
   int[][] sourceImage;

public Filter(int[][] image) {

        sourceImage = new int[image.length][];

    for (int i = 0; i < image.length; ++i) {
         sourceImage[i] = Arrays.copyOf(image[i], image[i].length);
     }
   } 

}

你必须这样做,因为如果你这样做

sourceImage=image;//(WHICH SHOULD NEVER BE DONE UNLESS YOU ACTUALLY WANT BOTH TO REFER TO THE SAME LOCATION)

然后,如果您在程序中尝试更改图片的值,那么 sourceImage 的值将更改,因为它们引用< strong>相同位置

答案 4 :(得分:-2)

您无法传递数组。从技术上讲,只在方法之间传递地址。 相反,您可以将数组保留在类中,并将该类作为参数发送。

A级{
   int arr [] = {1,2,3,4,5};
}

B级{
   A =新A();
   公共过程(A y){
   }
}

希望这能澄清你的问题。