当前位置: 代码迷 >> J2SE >> java 怎么实现Swap函数 交换两个数
  详细解决方案

java 怎么实现Swap函数 交换两个数

热度:41   发布时间:2016-04-24 13:07:11.0
java 如何实现Swap函数 交换两个数?
小弟现在想交换两个数,本以为会应该很简单的,这下可麻烦了,于是小弟写了个测试类.
代码如下:
Java code
public class Swap{    public static void main(String[] args)    {        //SwapTest st=SwapTest(2,3);  不能这样写,因为2,3为基本数据类型int型的,而非对象Integer型        Integer a=new Integer(2);        Integer b=new Integer(3);        SwapTest st=new SwapTest(a,b);        System.out.println("before swap:");        st.outPut();        st.dataSwap(a,b);        System.out.println("after swap:");        st.outPut();    }}class SwapTest{    Integer a=null;    Integer b=null;        public SwapTest(Integer a,Integer b)    {        this.a=a;        this.b=b;    }        protected void dataSwap(Integer a,Integer b)    {        Integer temp=a;        a=b;        b=temp;    }        protected void outPut()    {        System.out.println("a="+a+" b="+b);    } }

问下,上面的程序出错在哪里,......我知道值传递是实现不了的,只能用引用传递,我上面的程序不是引用传递吗?...好像是啊..


------解决方案--------------------
Java code
//每天都有这样的帖子...protected void dataSwap(Integer a,Integer b)//拷贝2个引用a,b    {// 总结来说,你传进来之后,开始是拷贝的和被拷贝的指向同一个对象,但是你在下面把这个拷贝的引用指向了另一个,这时候它跟被拷贝的引用之间没什么关系了,你爱改怎么改就怎么改!        Integer temp=a;//和temp都指向同一个对象        a=b;//把a指向b指向的对象,现在指向同一个对象        b=temp;//...    }
------解决方案--------------------
protected void dataSwap(Integer a,Integer b)
{
Integer temp=a;
a=b;
b=temp;
}
你交换的是dataSwap函数里的参数a,b,而你的outPut输出的是SwapTest的属性a,b
这样改:
protected void dataSwap()
{
Integer temp=this.a;
this.a=this.b;
this.b=temp;
}
  相关解决方案