所以我有这段代码
public class Filter {
int[][] sourceImage;
public Filter(int[][] image) {
// TODO store values to sourceImage
}
}
我想要做的就是将传递给image的值存储到sourceImage中。有人可以帮我解决这个问题吗?谢谢。
答案 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
与传递给构造函数的相同的数组是可以的,那么您可以简单地分配它。这样做意味着对其中一个数组(image
或sourceImage
)的任何更改都会影响它们,因为它们只是对同一个数组对象的两个引用。
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){
}
}
希望这能澄清你的问题。