关于交换两个值的问题

时间:2021-10-20 23:18:25
现在定义一个public void swap(int a, int b){}方法,接下来的main函数里面:
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;
}

#2


只是交换两个值用什么数组,这不是找麻烦吗。

#3


你不知道查api吗?  哪有swap  除非自己编个  调用

#4


java的初学者大都犯LZ这样的错误,因为java没有指针操作,所以不能单纯的改变引用指向来达到结果外传的目的
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];
}

#6


引用 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];
}
这个也算是一个数组了

#7


temp,交换两个引用所指向的内容!

#8


没事找事这是啊。。。

#9


最近怎么这么多人问这个问题呢
楼主记住两点:
1 对象传引用(引用即指针)
2 原始类型传值
你的例子里就是原始类型,传的参数是一个副本,当然不能改变

#10


楼主好好画个内存分布图就知道这个方法调用最后还是不能交换main函数中x,y的值了,如果是数组里话就可以看出对象来用,倒是可以交换,当没什么实用价值吧

#11


 如何实现类似 swap 的方法

  传值还是传引用的问题,到此已经算是解决了,但是我们仍然不能解决这样一个问题:如果我有两个 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;
}

#2


只是交换两个值用什么数组,这不是找麻烦吗。

#3


你不知道查api吗?  哪有swap  除非自己编个  调用

#4


java的初学者大都犯LZ这样的错误,因为java没有指针操作,所以不能单纯的改变引用指向来达到结果外传的目的
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];
}

#6


引用 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];
}
这个也算是一个数组了

#7


temp,交换两个引用所指向的内容!

#8


没事找事这是啊。。。

#9


最近怎么这么多人问这个问题呢
楼主记住两点:
1 对象传引用(引用即指针)
2 原始类型传值
你的例子里就是原始类型,传的参数是一个副本,当然不能改变

#10


楼主好好画个内存分布图就知道这个方法调用最后还是不能交换main函数中x,y的值了,如果是数组里话就可以看出对象来用,倒是可以交换,当没什么实用价值吧

#11


 如何实现类似 swap 的方法

  传值还是传引用的问题,到此已经算是解决了,但是我们仍然不能解决这样一个问题:如果我有两个 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