黑马程序员技术交流社区

标题: 怎么样才可以不用中间变量交换两个int型变量的值? [打印本页]

作者: 吴建昆    时间: 2013-4-29 00:52
标题: 怎么样才可以不用中间变量交换两个int型变量的值?
本帖最后由 吴建昆 于 2013-4-29 02:04 编辑

通常情况下,交换int型变量的值时,都会定义一个中间变量,来回的倒腾,最终实现两个变量值的交换。
那么,还有没有其它方法可以实现交换功能呢?
作者: 贾文泽    时间: 2013-4-29 01:48
a = a + b;
b = a - b;     //a+b-b 就是 a  赋给 b
a = a - b;     // a+b - b(上一步的b也就是原来的a)  就等于原来的 b   赋给 a  
作者: 吴建昆    时间: 2013-4-29 02:03
贾文泽 发表于 2013-4-29 01:48
a = a + b;
b = a - b;     //a+b-b 就是 a  赋给 b
a = a - b;     // a+b - b(上一步的b也就是原来的a) ...

谢谢 简单明了,懂了 呵呵
作者: Jacky_Chen1990    时间: 2013-4-29 09:02
通过位移运算来进行交换:
大致过程如下
int x = 10;
int y = 20;
x = x ^ y;
y = x ^ y;
x = x ^ y;
作者: harborbest    时间: 2013-4-29 09:14
这个问题之前就有同学问过了,一般的有俩种方法,
一种是通过和:x=x+y;
y=x-y
x=x-y
还有一种就是异或运算
x = x ^ y;
y = x ^ y;
x = x ^ y;

作者: 赵崇友    时间: 2013-4-29 09:45
  1. class SwapVar
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 //第一种方法,当x和y较大时,可能会出现int范围溢出问题
  6.                 int x=3;
  7.                 int y=4;
  8.                 x=x+y;
  9.                 y=x-y;
  10.                 x=x-y;
  11.                 out.println("x="+x+";y="+y);
  12.                
  13.                 //第二种方法
  14.                 int a=3;
  15.                 int b=4;
  16.                 a=a^b;
  17.                 b=a^b;
  18.                 a=a^b;
  19.                 out.println("a="+a+";b="+b);
  20.         }
  21. }
复制代码
不过在进行变量交换时,还是建议使用第三方变量。
作者: 花开花落总相似    时间: 2013-4-29 10:40
   楼上正解   具体讲解 毕老师 基础教学 第二天   15个视频有详细讲解  正好复习到这里 嘻嘻




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2