如何用Java实现void swap(int a,int b)?

qq1212 2009-03-25 08:15:17
实现互换a,b功能

注意是用public static void swap(int a,int b){}

方法名已经定死了 不能更改 用数组入参不行 返回值不行 用temp是无法实现互换的 试过都知道 请教实现方式

如果封装起来再试呢?

public static void swap(Integer a, Integer b){}又能实现不?
...全文
990 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ge 2009-09-17
  • 打赏
  • 举报
回复
只要记住,对象是传引用的就行。而基本数据类型是传值的。
1. 如果是下面的方式,那么Test中的int值也是可改的。
2. 如果Integer中也有一个int的类变量,那它的值也是可换的。
3. 如果在方法中只能对方法的参数(对象)本身操作,是永远不能改变这个方法外的这个参数的引用的。因为方法传递的是这个引用的一个拷贝。

public class IntegerTest {

public static void main(String[] args) {
Test A = new Test();
Test B = new Test();

A.setValue(10);
B.setValue(12);

IntegerTest tt = new IntegerTest();
System.out.println("Before A = " + A.getValue());
System.out.println("Before B = " + B.getValue());
tt.swap(A, B);
System.out.println("After A = " + A.getValue());
System.out.println("After B = " + B.getValue());

}
public void swap(Test A, Test B) {
int tmp = A.getValue();
A.setValue(B.getValue());
B.setValue(tmp);
}
}
class Test {
int a;
public void setValue(int a) {
this.a = a;
}
public int getValue() {
return a;
}
}

Before A = 10
Before B = 12
After A = 12
After B = 10
long9299 2009-03-26
  • 打赏
  • 举报
回复
试过了 实现不了
archko 2009-03-26
  • 打赏
  • 举报
回复
上面的兄弟,这样可以不?有没有具体点怎么可以。
 前几天我问过这样的问题,结论是这题没有结果。无解
Wbl314 2009-03-26
  • 打赏
  • 举报
回复
如果非要这么实现的话
你可以再里边调用一个有返回值的方法

public static void swap(int a,int b){

swap2(a,b)
}

public static int swap2(int a,int b){


}
但这种人肯定脑壳有包
ethan119 2009-03-26
  • 打赏
  • 举报
回复
在你调用方法swap(a,b)的时候,传给方法的只是a,b的副本,只在swap()中有效,方法结束后副本被回收了,也就是说不管你怎么折腾a,b折腾的都不是a,b本身,a,b也从没被修改过。
RossLiang 2009-03-26
  • 打赏
  • 举报
回复
As java method parameter, basic data type is passed by value, but object is passed by address.
y3231057 2009-03-26
  • 打赏
  • 举报
回复
根本都换都了了,void
hoojo 2009-03-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dreamhunter_lan 的回复:]
这个问题是被实践证明了的不能实现的,a和b是不可能交换的
因为java只有值传递
public static void swap(int a,int b){}
public static void swap(Integer a, Integer b){}
都不行!!!
[/Quote]
同意 这么死 这么换 有不是main函数 你是一个无返回值的方法
dbsshida 2009-03-26
  • 打赏
  • 举报
回复
想实现这样的功能,我想C倒是可以...
oklinsong 2009-03-26
  • 打赏
  • 举报
回复
肯定不行,int是基本型,如果是void的话,打死你也换不了。
chxy148 2009-03-26
  • 打赏
  • 举报
回复
都不行
ygrsh123 2009-03-26
  • 打赏
  • 举报
回复
1.改参数类型可以实现
2.用返回值可以实现
3.什么都不用就别想了~
woshishei0527 2009-03-26
  • 打赏
  • 举报
回复
根本看不懂你们在说写什么。有愿意解释的给我发信。
捏造的信仰 2009-03-26
  • 打赏
  • 举报
回复
no way
ethan119 2009-03-26
  • 打赏
  • 举报
回复
大师说Java只能用值传递,您就死了这心吧。
网络咖啡 2009-03-26
  • 打赏
  • 举报
回复
实现不了,因为基本数据类型是按照数值传递
qq1212 2009-03-25
  • 打赏
  • 举报
回复
a,b互换当然就是换完后变成b,a了
我不是限制你非不能用temp,1楼那个跟temp本质相同,返回void死活是传不出来的,你试了就知道了
dreamhunter_lan 2009-03-25
  • 打赏
  • 举报
回复
这个问题是被实践证明了的不能实现的,a和b是不可能交换的
因为java只有值传递
public static void swap(int a,int b){}
public static void swap(Integer a, Integer b){}
都不行!!!
qq1212 2009-03-25
  • 打赏
  • 举报
回复
为什么呢?能说的具体点吗?我其实想要理由
云上飞翔 2009-03-25
  • 打赏
  • 举报
回复
[Quote=引用楼主 qq1212 的帖子:]
实现互换a,b功能

注意是用public static void swap(int a,int b){}

方法名已经定死了 不能更改 用数组入参不行 返回值不行 用temp是无法实现互换的 试过都知道 请教实现方式

如果封装起来再试呢?

public static void swap(Integer a, Integer b){}又能实现不?
[/Quote]
答:
public static void swap(int a,int b){} 不行
public static void swap(Integer a, Integer b){} 不行

方法名已经定死了 不能更改 用数组入参不行 返回值不行 既然都这样"定死了",你也就死了互换这条心了.
加载更多回复(1)

62,616

社区成员

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

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