public static void main(String[] args){
int x = 5;int y = 6;
swap(x,y);以此达到交换两个值的问题
}听到网上很多人说可以用数组来做,我不会,求指教~~~~异或运算可以的,我试过了,就数组不懂~~~
11 个解决方案
#1
不是数组的话,你目前的这种写法,根本不可能完成交换啊。。。
public void swap(int[] nums) {
int tmp = nums[0];
nums[0]=nums[1];
nums[1]=tmp;
}
public void swap(int[] nums) {
int tmp = nums[0];
nums[0]=nums[1];
nums[1]=tmp;
}
#2
只是交换两个值用什么数组,这不是找麻烦吗。
#3
你不知道查api吗? 哪有swap 除非自己编个 调用
#4
java的初学者大都犯LZ这样的错误,因为java没有指针操作,所以不能单纯的改变引用指向来达到结果外传的目的
LZ可以想想,main的x,y和swap的a,b是相同的变量吗?如果不是,你改变一个,怎么会影响另一个?
采用数组的话,main的数组变量和swap的数组变量虽然不时同一个变量,但是它们指向同一个数组对象,所以改变一个引用变量的属性(对数组来说就是改变元素),另一个引用变量能看到对象的变换
LZ可以想想,main的x,y和swap的a,b是相同的变量吗?如果不是,你改变一个,怎么会影响另一个?
采用数组的话,main的数组变量和swap的数组变量虽然不时同一个变量,但是它们指向同一个数组对象,所以改变一个引用变量的属性(对数组来说就是改变元素),另一个引用变量能看到对象的变换
#5
数组操作和你用两个变量两的操作一样,异或运算也一样,就是用数组元素代替变量就可以了
for exanple
public void swap(int[] n) {
n[0] = n[0] ^ n[1]; //n[0]相当于x,n[1]相当于y
n[1] = n[0] ^ n[1];
n[0] = n[0] ^ n[1];
}
for exanple
public void swap(int[] n) {
n[0] = n[0] ^ n[1]; //n[0]相当于x,n[1]相当于y
n[1] = n[0] ^ n[1];
n[0] = n[0] ^ n[1];
}
#6
这个也算是一个数组了
#7
temp,交换两个引用所指向的内容!
#8
没事找事这是啊。。。
#9
最近怎么这么多人问这个问题呢
楼主记住两点:
1 对象传引用(引用即指针)
2 原始类型传值
你的例子里就是原始类型,传的参数是一个副本,当然不能改变
楼主记住两点:
1 对象传引用(引用即指针)
2 原始类型传值
你的例子里就是原始类型,传的参数是一个副本,当然不能改变
#10
楼主好好画个内存分布图就知道这个方法调用最后还是不能交换main函数中x,y的值了,如果是数组里话就可以看出对象来用,倒是可以交换,当没什么实用价值吧
#11
如何实现类似 swap 的方法
传值还是传引用的问题,到此已经算是解决了,但是我们仍然不能解决这样一个问题:如果我有两个 int 型的变量 a 和 b,我想写一个方法来交换它们的值,应该怎么办?
结论很让人失望——没有办法!因此,我们只能具体情况具体讨论,以经常使用交换方法的排序为例:
bolg链接: http://blog.csdn.net/skillart/article/details/7670998
传值还是传引用的问题,到此已经算是解决了,但是我们仍然不能解决这样一个问题:如果我有两个 int 型的变量 a 和 b,我想写一个方法来交换它们的值,应该怎么办?
结论很让人失望——没有办法!因此,我们只能具体情况具体讨论,以经常使用交换方法的排序为例:
/** 例 6 */
/**
* @(#) Test.java
* @author fancy
*/
public class Test {
public static void swap(int[] data, int a, int b) {
int t = data[a];
data[a] = data[b];
data[b] = t;
}
public static void main(String[] args) {
int[] data = new int[10];
for (int i = 0; i < 10; i++) {
data[i] = (int) (Math.random() * 100);
System.out.print(" " + data[i]);
}
System.out.println();
for (int i = 0; i < 9; i++) {
for (int j = i; j < 10; j++) {
if (data[i] > data[j]) {
swap(data, i, j);
}
}
}
for (int i = 0; i < 10; i++) {
System.out.print(" " + data[i]);
}
System.out.println();
}
}
运行结果(情况之一):
78 69 94 38 95 31 50 97 84 1
1 31 38 50 69 78 84 94 95 97
bolg链接: http://blog.csdn.net/skillart/article/details/7670998
#1
不是数组的话,你目前的这种写法,根本不可能完成交换啊。。。
public void swap(int[] nums) {
int tmp = nums[0];
nums[0]=nums[1];
nums[1]=tmp;
}
public void swap(int[] nums) {
int tmp = nums[0];
nums[0]=nums[1];
nums[1]=tmp;
}
#2
只是交换两个值用什么数组,这不是找麻烦吗。
#3
你不知道查api吗? 哪有swap 除非自己编个 调用
#4
java的初学者大都犯LZ这样的错误,因为java没有指针操作,所以不能单纯的改变引用指向来达到结果外传的目的
LZ可以想想,main的x,y和swap的a,b是相同的变量吗?如果不是,你改变一个,怎么会影响另一个?
采用数组的话,main的数组变量和swap的数组变量虽然不时同一个变量,但是它们指向同一个数组对象,所以改变一个引用变量的属性(对数组来说就是改变元素),另一个引用变量能看到对象的变换
LZ可以想想,main的x,y和swap的a,b是相同的变量吗?如果不是,你改变一个,怎么会影响另一个?
采用数组的话,main的数组变量和swap的数组变量虽然不时同一个变量,但是它们指向同一个数组对象,所以改变一个引用变量的属性(对数组来说就是改变元素),另一个引用变量能看到对象的变换
#5
数组操作和你用两个变量两的操作一样,异或运算也一样,就是用数组元素代替变量就可以了
for exanple
public void swap(int[] n) {
n[0] = n[0] ^ n[1]; //n[0]相当于x,n[1]相当于y
n[1] = n[0] ^ n[1];
n[0] = n[0] ^ n[1];
}
for exanple
public void swap(int[] n) {
n[0] = n[0] ^ n[1]; //n[0]相当于x,n[1]相当于y
n[1] = n[0] ^ n[1];
n[0] = n[0] ^ n[1];
}
#6
这个也算是一个数组了
#7
temp,交换两个引用所指向的内容!
#8
没事找事这是啊。。。
#9
最近怎么这么多人问这个问题呢
楼主记住两点:
1 对象传引用(引用即指针)
2 原始类型传值
你的例子里就是原始类型,传的参数是一个副本,当然不能改变
楼主记住两点:
1 对象传引用(引用即指针)
2 原始类型传值
你的例子里就是原始类型,传的参数是一个副本,当然不能改变
#10
楼主好好画个内存分布图就知道这个方法调用最后还是不能交换main函数中x,y的值了,如果是数组里话就可以看出对象来用,倒是可以交换,当没什么实用价值吧
#11
如何实现类似 swap 的方法
传值还是传引用的问题,到此已经算是解决了,但是我们仍然不能解决这样一个问题:如果我有两个 int 型的变量 a 和 b,我想写一个方法来交换它们的值,应该怎么办?
结论很让人失望——没有办法!因此,我们只能具体情况具体讨论,以经常使用交换方法的排序为例:
bolg链接: http://blog.csdn.net/skillart/article/details/7670998
传值还是传引用的问题,到此已经算是解决了,但是我们仍然不能解决这样一个问题:如果我有两个 int 型的变量 a 和 b,我想写一个方法来交换它们的值,应该怎么办?
结论很让人失望——没有办法!因此,我们只能具体情况具体讨论,以经常使用交换方法的排序为例:
/** 例 6 */
/**
* @(#) Test.java
* @author fancy
*/
public class Test {
public static void swap(int[] data, int a, int b) {
int t = data[a];
data[a] = data[b];
data[b] = t;
}
public static void main(String[] args) {
int[] data = new int[10];
for (int i = 0; i < 10; i++) {
data[i] = (int) (Math.random() * 100);
System.out.print(" " + data[i]);
}
System.out.println();
for (int i = 0; i < 9; i++) {
for (int j = i; j < 10; j++) {
if (data[i] > data[j]) {
swap(data, i, j);
}
}
}
for (int i = 0; i < 10; i++) {
System.out.print(" " + data[i]);
}
System.out.println();
}
}
运行结果(情况之一):
78 69 94 38 95 31 50 97 84 1
1 31 38 50 69 78 84 94 95 97
bolg链接: http://blog.csdn.net/skillart/article/details/7670998