我试图反转一个Bitmap数组,而不修改源数组。但问题是源阵列也正在逆转。我做错了什么,或者我想以其他方式做错? 谢谢你的帮助。
private GalleryAdapter galleryAdapter;
private ReverseGalleryAdapter rGalleryAdapter;
public void onCreate(Bundle savedInstanceState) {
galleryAdapter = new GalleryAdapter(this, imageThumbnails, imagePaths,
videoThumbnails, videoPaths);
imagegrid.setAdapter(galleryAdapter);
rGalleryAdapter = new ReverseGalleryAdapter(this, reverseBArray(videoThumbnails), reverseSArray(videoPaths),
reverseBArray(imageThumbnails), reverseSArray(imagePaths));
imagegrid2.setAdapter(rGalleryAdapter);
}
private Bitmap[] reverseBArray(Bitmap[] v){
Bitmap[] bTemp;
bTemp = v;
int len = bTemp.length;
Bitmap temp;
for (int i = 0; i < len/2; i++)
{
temp = bTemp[i];
bTemp[i] = bTemp[len-1 - i];
bTemp[len-1 - i] = temp;
}
return bTemp;
}
private String[] reverseSArray(String[] s){
String[] sTemp;
sTemp =s;
int len = sTemp.length;
String temp;
for (int i = 0; i < len/2; i++)
{
temp = sTemp[i];
sTemp[i] = sTemp[len-1 - i];
sTemp[len-1 - i] = temp;
}
return sTemp;
}
答案 0 :(得分:3)
Bitmap[] bTemp;
bTemp = v;
当你这样做时,defenitley都引用同一个数组,因为你没有在那里创建一个新数组。
这里也发生了同样的事情
String[] sTemp;
sTemp =s;
可能的消息:Make copy of array Java(建议在阅读可能的方法后选择)。
我的建议来自Official docs :(请参阅复制数组部分)
System类有一个arraycopy()方法,可以用来有效地将数据从一个数组复制到另一个数组中:
public static void arraycopy(Object src, int srcPos,
Object dest, int destPos, int length)
答案 1 :(得分:2)
使用bTemp = v;
,您指的是同一个Object
。
您可以使用clone()
方法制作数组副本:
bTemp = v.clone();
然后你可以自由修改并返回它。
答案 2 :(得分:0)
记住数组是对象,在方法reverseArray中,你重新指定对temp的引用,所以现在你有2个引用(v和temp)到同一个对象。进行下面提到的适当更改
private Bitmap[] reverseBArray(Bitmap[] v){
Bitmap[] bTemp;
bTemp = v; // CHANGE IT to bTemp = new Bitmap[v.length]
int len = bTemp.length;
Bitmap temp;
for (int i = 0; i < len/2; i++)
{
temp = bTemp[i];
bTemp[i] = bTemp[len-1 - i];
bTemp[len-1 - i] = temp;
}
return bTemp;
}
答案 3 :(得分:0)
我认为你想保持两个对象都正确吗? 如果是这样,我认为您可以使用clone()方法并将该克隆对象传递给方法而无需修改原始对象
答案 4 :(得分:-1)
Java没有按值传递对象。您将数组对象引用传递给您的方法,从而将数组本身传递给您。最好的方法是创建数组的副本并传递数组的副本。