交换两个数组的元素首尾交换
方法一:将两个数组的对应元素,一一交换一遍就可以了,但是这两个数组的长度必须是一样长的,否则就没法交换了。
package ChangeTwoArray;
public class ChangeTwoArray {
public void ChangeTwoArray(int[] a,int[] b){
//先有两个数组
//方法一:对位置的元素交换即可
for(int i=0;i<a.length;i++){
int temp=a[i];
a[i]=b[i];
b[i]=temp;
}
//最后输出验证一下
for(int value:a){
System.out.print(value+" ");
}
System.out.println("\n"+"--------------------------");
for(int value:b){
System.out.print(value+" ");
}
}
}
package ChangeTwoArray;
public class TestMain {
public static void main(String[] args){
int[] a={1,2,3,4,5};
int[] b={6,7,8,9,10};
ChangeTwoArray changeTwoArray=new ChangeTwoArray();
changeTwoArray.ChangeTwoArray(a,b);
}
}
总之,这里主要是想说一下参数和返回值的问题,还是画个原理图比较清楚吧
方法二:我们可以直接交换两个数组的地址,从而达到将两个数组的元素进行交换,这种交换方式突破了数组长度的限制,
package ChangeTwoArray;
public class ChangeTwoArray {
public int[][] ChangeTwoArray(int[] a,int[] b){
//先有两个数组
//方法一:对位置的元素交换即可
for(int i=0;i<a.length;i++){
int[] temp=a;
a=b;
b=temp;
}
//接返回值,才能得到交换的结果,否则交换的临时空间消失后,无法达到交换
int[][] result={a,b};
return result;
}
}
package ChangeTwoArray;
public class TestMain {
public static void main(String[] args){
int[] a={1,2,3,4,5,59,30,58};
int[] b={6,7,8,9,10};
ChangeTwoArray changeTwoArray=new ChangeTwoArray();
//用一个[][] value二维数组来接返回值
int [][] value=changeTwoArray.ChangeTwoArray(a,b);
a=value[0];
b=value[1];
//最后输出验证一下
for(int v:a){
System.out.print(v+" ");
}
System.out.println("\n"+"--------------------------");
for(int v:b){
System.out.print(v+" ");
}
}
}
方法二中的这里,主要是想强调一下,为什么地址交换完后需要接返回值,不接可以吗?当然不行。因为方法是储存在堆内存的对象空间的,执行时在栈内存的临时空间,方法执行完,没有接返回值,临时空间消失(就相当于红色部分和蓝色部分都消失了),原地址没有改变,,就相当于没有交换过来。