java 交换两个数组的值

duxd1989 2014-05-20 07:29:27
public class StringDemo {

public static void change(int a, int b){
int temp = a;
a = b;
b = temp;
}
public static void main(String[] args) {
int[] a = {1,3,5,7};
int[] b = {2,4,6,8};
change(a, b);

}

}

想交换两个数组的值 即最后结果 a={2,4,6,8} b={1,3,5,7}
我上面的这种方法好像不行啊 想直接交换对象的引用
...全文
1542 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
lliiqiang 2014-06-04
  • 打赏
  • 举报
回复
java是值传递,地址值传递给参数,本身不会指向新地址
fengerpiao123 2014-06-03
  • 打赏
  • 举报
回复
lz想交换数组里的元素,change(a,b)中a,b都是数组类型而不是int,所以错了按照lz的思路可以这样写 for(int i=0;i<a.lenght;i++){ int temp=a[i]; a[i]=b[i]; b[i]=temp; }
wang_huanming 2014-06-03
  • 打赏
  • 举报
回复
使用临时数组,在用你的chang方法替换,参数是数组,而不是两个字符串。
xuebichongkafei 2014-05-22
  • 打赏
  • 举报
回复
这么简单的一个交换,还要去调用方法? 赶脚,是拿着大炮去杀鸡啊! 楼主代码有问题,交换的是基本数据类型,传入的是引用数据类型, 用10楼哥们的方法最简单撒!
dyf20081124 2014-05-22
  • 打赏
  • 举报
回复
temp保存的是要交换的引用,所以要交换两个数组的值只要让a 数组和b数组换个指向就可以了
buyaosowd 2014-05-22
  • 打赏
  • 举报
回复
2楼到底是不是正解啊 这么简单吗
tanxiongfei 2014-05-22
  • 打赏
  • 举报
回复
引用 12 楼 u013305099 的回复:
2楼到底是不是正解啊 这么简单吗
2楼和13楼正解
  • 打赏
  • 举报
回复
引用 10 楼 xuhu_it 的回复:
[quote=引用 6 楼 yiqitony 的回复:] 看楼上说有System.arraycopy方法可以实现复制,我就用了下

import java.util.*;
public class SwapArray{
	public static void main(String[] args){
		
		int[] a={1,2,3,4};
		int[] b={2,3,4,5};
		swop(a,b);
		System.out.println(Arrays.toString(a));		
		System.out.println(Arrays.toString(b));

	}
	public static void swop(int[] a,int[] b){
		int[] temp=new int[a.length];
		System.arraycopy(a,0,temp,0,a.length);
		System.arraycopy(b,0,a,0,b.length);
		System.arraycopy(temp,0,b,0,temp.length);	
	}
}
使用数组一定要注意数组存放元素的个数是固定的,所以交换的时候两个数组的长度要相同,不然运行会报错:java.lang.ArrayIndexOutOfBoundsException 如何解决交换数组而不用担心索引越界的问题?
        int[] a = new int[]{1, 2, 3, 4};
        int[] b = new int[]{5, 6, 7, 8, 9};
        int[] temp = null;
        
        temp = a;
        a = b;
        b = temp;
[/quote]
alan19931103 2014-05-22
  • 打赏
  • 举报
回复
引用 1 楼 vnvlyp 的回复:
	public static void main(String[] args) {
		int[] a = {1,3,5,7};
		int[] b = {2,4,6,8};
		
		int[] temp = a;
		a = b;
		b = temp;
	}
你可以在方法内直接交换引用,但你不能通过函数调用交换,何况你那个交换函数还是错误的。。。
用这个就可以了
xuhu_it 2014-05-21
  • 打赏
  • 举报
回复
引用 6 楼 yiqitony 的回复:
看楼上说有System.arraycopy方法可以实现复制,我就用了下

import java.util.*;
public class SwapArray{
	public static void main(String[] args){
		
		int[] a={1,2,3,4};
		int[] b={2,3,4,5};
		swop(a,b);
		System.out.println(Arrays.toString(a));		
		System.out.println(Arrays.toString(b));

	}
	public static void swop(int[] a,int[] b){
		int[] temp=new int[a.length];
		System.arraycopy(a,0,temp,0,a.length);
		System.arraycopy(b,0,a,0,b.length);
		System.arraycopy(temp,0,b,0,temp.length);	
	}
}
使用数组一定要注意数组存放元素的个数是固定的,所以交换的时候两个数组的长度要相同,不然运行会报错:java.lang.ArrayIndexOutOfBoundsException 如何解决交换数组而不用担心索引越界的问题?
        int[] a = new int[]{1, 2, 3, 4};
        int[] b = new int[]{5, 6, 7, 8, 9};
        int[] temp = null;
        
        temp = a;
        a = b;
        b = temp;
xuhu_it 2014-05-21
  • 打赏
  • 举报
回复
引用 7 楼 sunbo624 的回复:
[quote=引用 4 楼 xuhu_it 的回复:] [quote=引用 3 楼 JUST_lOVE_LE 的回复:] 数组的交互 JAVA是提供方法的 system.arraycopy() 用这个方法就可以实现了
三楼正解 我一直都是这么用的[/quote] 那你俩估计都有问题 直接改变地址就好 为啥要新申请内存 再拷贝[/quote] 嗯 你说的对着呢 我没仔细看
she383 2014-05-21
  • 打赏
  • 举报
回复
对头,和一般的变量交换没啥区别
sunbo624 2014-05-21
  • 打赏
  • 举报
回复
引用 4 楼 xuhu_it 的回复:
[quote=引用 3 楼 JUST_lOVE_LE 的回复:] 数组的交互 JAVA是提供方法的 system.arraycopy() 用这个方法就可以实现了
三楼正解 我一直都是这么用的[/quote] 那你俩估计都有问题 直接改变地址就好 为啥要新申请内存 再拷贝
  • 打赏
  • 举报
回复
看楼上说有System.arraycopy方法可以实现复制,我就用了下

import java.util.*;
public class SwapArray{
	public static void main(String[] args){
		
		int[] a={1,2,3,4};
		int[] b={2,3,4,5};
		swop(a,b);
		System.out.println(Arrays.toString(a));		
		System.out.println(Arrays.toString(b));

	}
	public static void swop(int[] a,int[] b){
		int[] temp=new int[a.length];
		System.arraycopy(a,0,temp,0,a.length);
		System.arraycopy(b,0,a,0,b.length);
		System.arraycopy(temp,0,b,0,temp.length);	
	}
}
使用数组一定要注意数组存放元素的个数是固定的,所以交换的时候两个数组的长度要相同,不然运行会报错:java.lang.ArrayIndexOutOfBoundsException 如何解决交换数组而不用担心索引越界的问题?
  • 打赏
  • 举报
回复
package com.csdn_20141520;

public class ArraycopyTest {

	public static void main(String[] args) {
		
		 int[] a = {1,3,5,7};
		 int[] b = {2,4,6,8};
		 
		 change(a, b);
		 
		 for (int i = 0; i < a.length; i++) {
			System.out.print(a[i] + " ");
			System.out.println();
		}
		 
		 for (int i = 0; i < b.length; i++) {
			System.out.println(b[i]+ " ");
		}
	}
	
    public static void change(int[] a, int[] b){
      
    	int[] temp = new int[4];
    	
    	for (int i = 0; i < a.length; i++) {
			temp[i] = a[i];
			a[i] = b[i];
			b[i] = temp[i];
		}
    	
    }
}
楼上说的System.arraycopy好像是数组的复制吧。
xuhu_it 2014-05-20
  • 打赏
  • 举报
回复
引用 3 楼 JUST_lOVE_LE 的回复:
数组的交互 JAVA是提供方法的 system.arraycopy() 用这个方法就可以实现了
三楼正解 我一直都是这么用的
北落师门_Orz 2014-05-20
  • 打赏
  • 举报
回复
数组的交互 JAVA是提供方法的 system.arraycopy() 用这个方法就可以实现了
q6486595 2014-05-20
  • 打赏
  • 举报
回复
public class StringDemo { public static void main(String[] args) { int a[] = {1,3,5,7}; int b[] = {2,4,6,8}; change(a,b); System.out.println(a[0]+".."+b[0]); } public static void change(int a[], int b[]){ int temp[] =a; a = b; b = temp; System.out.println(a[0]+".."+b[0]); } } 尼玛!我也是初学!想了半天!我知道问题所在了!但是改还没想好呢!问题就是调用方法的时候!change(a,b);和方法的参数列表change(int a[],int b[]) 其实是 int a[]=a;b.....这就代表又新建了一个数组a[]
vnvlyp 2014-05-20
  • 打赏
  • 举报
回复
	public static void main(String[] args) {
		int[] a = {1,3,5,7};
		int[] b = {2,4,6,8};
		
		int[] temp = a;
		a = b;
		b = temp;
	}
你可以在方法内直接交换引用,但你不能通过函数调用交换,何况你那个交换函数还是错误的。。。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧