java 如何实现Swap函数 交换两个数?

FL1429 2008-04-29 08:09:29
小弟现在想交换两个数,本以为会应该很简单的,这下可麻烦了,于是小弟写了个测试类.
代码如下:

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);
}
}

问下,上面的程序出错在哪里,......我知道值传递是实现不了的,只能用引用传递,我上面的程序不是引用传递吗?...好像是啊..
...全文
1780 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dalancon 2012-04-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

Java code

//每天都有这样的帖子...

protected void dataSwap(Integer a,Integer b)//拷贝2个引用a,b
{
// 总结来说,你传进来之后,开始是拷贝的和被拷贝的指向同一个对象,但是你在下面把这个拷贝的引用指向了另一个,这时候它跟被拷贝的引用之间没什么关系了,你爱改怎么改就怎么改!
Integer temp=a……
[/Quote]

解释清楚点好不 买看懂啊 嘿嘿
花花 2010-09-06
  • 打赏
  • 举报
回复
public class Test2 {

public static void main(String[] args) {
int a = 100;
int b = 200;
System.out.println("a = " + a + ", b = " + b);
SwapTest st = new SwapTest();
st.dataSwap(a, b);
st.print();
}
}

class SwapTest {
private int a;
private int b;

public void dataSwap(int a, int b) {
this.a = b;
this.b = a;
}

public void print() {
System.out.println("a = " + a + ", b = " + b);
}
}
anqini 2008-04-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 FL1429 的回复:]
4楼正确...!
最喜欢你的回答....分 give you~!
[/Quote]
我说这个方法!
protected void dataSwap(Integer a,Integer b)//这里a和b,你的成员变量也是a,b!还不明白?
{
Integer temp=a;
a=b;
b=temp;
}
FL1429 2008-04-29
  • 打赏
  • 举报
回复
4楼正确...!
最喜欢你的回答....分 give you~!
FL1429 2008-04-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 anqini 的回复:]
引用 3 楼 FL1429 的回复:
看来还是要靠自己解决啊....

我的问题已经解决:

解决办法,我把Swap函数重新写了一下.把传递的引用调换下就ok了~!

protected void dataSwap(Integer m,Integer n)
{
this.a=n;
this.b=m;
}


因为你的局部变量覆盖了成员变量 a和b!
[/Quote]

那也不行的,你的意思不就是把我的main函数里的a,b改下就行了吗,..不信你改成c,d..测试下,是也不可以的~!
anqini 2008-04-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 FL1429 的回复:]
看来还是要靠自己解决啊....

我的问题已经解决:

解决办法,我把Swap函数重新写了一下.把传递的引用调换下就ok了~!

protected void dataSwap(Integer m,Integer n)
{
this.a=n;
this.b=m;
}
[/Quote]

因为你的局部变量覆盖了成员变量 a和b!
KKK2007 2008-04-29
  • 打赏
  • 举报
回复
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;
}
FL1429 2008-04-29
  • 打赏
  • 举报
回复
看来还是要靠自己解决啊....

我的问题已经解决:

解决办法,我把Swap函数重新写了一下.把传递的引用调换下就ok了~!

protected void dataSwap(Integer m,Integer n)
{
this.a=n;
this.b=m;
}
anqini 2008-04-29
  • 打赏
  • 举报
回复

//每天都有这样的帖子...

protected void dataSwap(Integer a,Integer b)//拷贝2个引用a,b
{
// 总结来说,你传进来之后,开始是拷贝的和被拷贝的指向同一个对象,但是你在下面把这个拷贝的引用指向了另一个,这时候它跟被拷贝的引用之间没什么关系了,你爱改怎么改就怎么改!
Integer temp=a;//和temp都指向同一个对象
a=b;//把a指向b指向的对象,现在指向同一个对象
b=temp;//...
}

FL1429 2008-04-29
  • 打赏
  • 举报
回复
难道问题有点复杂??....怎么没有一个人进来呢........

62,614

社区成员

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

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