各位大虾,java中怎样将两个整数交换啊?
在C++中我们可以这样交换两个数:
void Exchange(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
但在Java中似乎不能用“&”来实现引用,那我该怎么办啊?
问题点数:20、回复次数:31Top
1 楼qjjabc()回复于 2006-10-12 22:31:13 得分 0
int a,b;
int temp=a;
a=b;
b=temp;
这样a,b两个的值就互换了
Top
2 楼kinsey0514(春天的老黄牛)回复于 2006-10-12 22:34:33 得分 0
markTop
3 楼xfei365(北一止水)回复于 2006-10-12 22:46:46 得分 0
change(int a,int b)
{
a+=b;
b=a-b;
a-=b;
}Top
4 楼wireless0300()回复于 2006-10-12 22:49:56 得分 0
public void Exchange(int a, int b)//java形式参数是不许要引用的
{
int temp = a;
a = b;
b = temp;
}
大体上和c++一样的
Top
5 楼sucfre()回复于 2006-10-12 22:55:15 得分 0
两个整数的交换没有必要写个函数,以一楼的那样写就可以了,JAVA确实没有C++的&Top
6 楼xstom19(hh)回复于 2006-10-12 23:56:13 得分 0
xfei365() 的挺有意思的,下面这样也可以:
int a,b;
a ^=b;
b ^=a;
a ^=b;Top
7 楼Idideads()回复于 2006-10-13 01:02:44 得分 0
多谢各位,虽然简单的三条语句是可以交换两个值,但由于某种特殊用途要写成函数呢?我想要两个值交换后都能返回,比如a=44,b=55,在java中运行完Exchange()函数后,要a=55,b=44。希望各位再赐教。Top
8 楼kg21tm1()回复于 2006-10-13 01:44:34 得分 0
先在函数外部定义a和b可以吗?Top
9 楼kg21tm1()回复于 2006-10-13 01:48:28 得分 0
int a,b;
void Exchange()
{
int temp = a;
a = b;
b = temp;
}
Top
10 楼Idideads()回复于 2006-10-13 01:59:36 得分 0
a、b最好以参数形式传进Exchange()当中啦.........Top
11 楼omgsunny(家人健康)回复于 2006-10-13 08:48:41 得分 0
java 方法 参数不传址Top
12 楼shengli_liao(我是谁?)回复于 2006-10-13 08:56:23 得分 0
构造对象,将a,b作为对象的属性,然后操作对象,最后获得对应的属性。Top
13 楼agui(阿贵: 高级图形用户界面)回复于 2006-10-13 09:37:10 得分 0
不可能!楼主死了这条心吧。
--
http://www.agui.googlepages.com
mailto: agui.cn(a)gmail.comTop
14 楼jihanzhong(逍遥)回复于 2006-10-13 09:41:13 得分 0
楼主用Integer就可以了Top
15 楼xun56789(狠狠右道【坚决不走旁门左道】)回复于 2006-10-13 09:42:27 得分 0
做个数组,傻吗
int a = 1, b = 2;
int i[] = new int[2];
i[0]=a;
i[1]=b;Top
16 楼maquan('ma:kju)回复于 2006-10-13 09:48:09 得分 0
> 楼主用Integer就可以了
逍遥兄误导了,Integer 是 immutable 的,一样不行。
如果一定要通过一个 method 来实现,下面的形式也许可以:
void swap(int[] a) {
if (a == null || a.length != 2)
throw new IllegalArgumentException();
int temp = a[0];
a[0] = a[1];
a[1] = temp;
}
不过,这样的话,调用的时候,可能需要用不止 3 条语句了 8-)Top
17 楼Idideads()回复于 2006-10-13 12:20:56 得分 0
用Integer不行啊
Integer io = new Integer();
int i = 123;
io = i;
会有错啊........Top
18 楼moodkingdom(马甲)回复于 2006-10-13 14:06:18 得分 0
change(int a,int b)
{
a+=b;
b=a-b;
a-=b;
}
------------
最高境界.哈哈.Top
19 楼whycloud(云木)回复于 2006-10-13 14:29:20 得分 0
楼主用Integer就可以了
正解~@~
因为这里是指针传递Top
20 楼buyaowen(失业中,请勿打扰)回复于 2006-10-13 14:43:19 得分 0
mark
学习Top
21 楼Areslp(努力ING)回复于 2006-10-13 14:49:54 得分 0
Integer对象是不可变的吧,你怎么换?Top
22 楼whycloud(云木)回复于 2006-10-13 15:42:44 得分 0
Areslp(努力ING) ( ) 信誉:100 Blog 2006-10-13 14:49:00 得分: 0
Integer对象是不可变的吧,你怎么换?
-----------------------------------
JDK5.0支持自动拆箱和自动装箱Top
23 楼Areslp(努力ING)回复于 2006-10-13 16:04:35 得分 0
ls的能给个说明的链接吗,谢谢:)Top
24 楼ly342540479(心不在跳了, 脸也不红了)回复于 2006-10-13 16:09:40 得分 0
头脑要变通Top
25 楼issgates(一直很安静)回复于 2006-10-13 16:32:36 得分 0
定义类的全局变量Top
26 楼xxq2554()回复于 2006-10-13 16:42:20 得分 0
int a = 1,b = 2;
change(a,b);
public void change(int a,int b)
{
this.a = b;
this.b = a;
}Top
27 楼agui(阿贵: 高级图形用户界面)回复于 2006-10-13 16:42:39 得分 0
Integer也不行,
1、Integer本身是值对象(value object),不能修改它的内容(找找哪个方法能修改它的内容?)。实际上,串对象String都不能改变;
2、就算Integer本身可以修改,自动装箱、拆箱也不灵:
void exchange( Integer ao, Integer bo ) { 交换ao和bo中的实际数据 }
int a, b;
exchange( a, b ); // 自动装箱机制生成了两个临时对象,不过调用返回时不能传回a和b。
最多只能这样:
Integer ao=a;
Integer bo=b;
exchange( ao, bo );
a = ao;
b = bo;
还是很麻烦。
--
http://www.agui.googlepages.com
mailto: agui.cn(a)gmail.comTop
28 楼chaircat(chaircat)回复于 2006-10-13 19:01:58 得分 0
a += b;
b = a-b;
a -= b;
不用临时变量...Top
29 楼Areslp(努力ING)回复于 2006-10-13 19:52:36 得分 0
呵呵,看了下自动拆箱和自动装箱,无奈小弟愚钝,还是没能想出用Integer怎么能实现,还望高人指点一下,最好写个东西看看:)Top
30 楼Idideads()回复于 2006-10-13 22:00:59 得分 0
在《学习java的日子里》有这样一说:
在java 5.0以后,仿照.net,java开始支持自动装箱,也就是在任何情况下,一个简单对象和于它对应的复杂对象之间,可以进行自动转换,比如:
Integer io = new Integer();
int i = 123;
io = i;
这种转换方式轻松的将一个简单对象(i)放置到了堆上(io)。
但我试时会出错,不是说会自动装箱吗?还是不了解........Top
31 楼agui(阿贵: 高级图形用户界面)回复于 2006-10-13 22:54:34 得分 0
楼主下次把错误信息带出来,高手们就不用去试了。
Integer io = new Integer() 这句有问题,Integer没有这个构造函数。
你必须放入一个参数: Integer io = new Integer(0)。
--
http://www.agui.googlepages.com
mailto: agui.cn(a)gmail.comTop




