问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java进行两数交换时,如何不用中间量就交换?

发布网友 发布时间:2022-04-25 15:38

我来回答

11个回答

热心网友 时间:2022-04-23 09:52

方法有很多,这里举出两种常用的:
方法1:使用^操作来实现
int x = 10;
//用二进制表示:x=0b1010;
int y = 15;
//用二进制表示:x=0b1111;
System.out.println("x="+x+" y="+y);
x = x^y;
//x^y= 0b1010^0b1111 = 0b0101
y = x^y;
//x^y= 0b0101^0b1111 = 0b1010 =10
x = x^y;
//x^y= 0b0101^0b1010 = 0b1111 =15
System.out.println("x="+x+" y="+y);
方法2:使用+,-操作来实现
int x = 10;
int y = 15;
System.out.println("x="+x+" y="+y);
x = x+y;
//x= 10+15=25
y = x-y;
//y= 25-15=10
x = x-y;
//x= 25-10=15
System.out.println("x="+x+" y="+y);
结果:
x=10 y=15
x=15 y=10
早期为了减少中间变量对计算机内存的占用,采用中间的方法来交换数据。其实这种交换并不完美,如果交换的两个数都很大,可能会内存溢出。在现在的开发中建议使用中间值来交换数值。

热心网友 时间:2022-04-23 11:10

先看第一个算法

static class Num{
    int a;
    int b;
}
public static void swap1(Num num){
    num.a = num.a + num.b;
    num.b = num.a - num.b;
    num.a = num.a - num.b;
}

上面代码通过“+”运算符将a和b的运算结果赋给了a(这时a是中间变量)。然后再计算b,这时a的值已经是(a+b)了,因此,a再减b就是原来的a。 而这时b已经是原来的a了,因此,再用运算后的a(实际上是a+b)减运算后的b(实际上是原来的a),就是原来的b了,最后将这个b赋值给a。

实际上,我们还可以使用“*”、“/”等符号来实现同样的效果,代码如下:

public static void swap2(Num num){
    num.a = num.a * num.b;
    num.b = num.a / num.b;
    num.a = num.a / num.b;
}
public static void swap3(Num num){
    num.a = num.a - num.b;
    num.b = num.a + num.b;
    num.a = num.b - num.a;
}

上面代码在Java中没有什么问题(但使用“/”时,分母和分子不能为0)。就算溢出也会得到正确的结果,但有某些语言中(如C语言),可能会抛出溢出错误,不了避免这种错误。可以加判断,代码如下:

public static void swap4(Num num){
    // 不同符号
    if (num.a * num.b <= 0)
    {
        num.a = num.a + num.b;
        num.b = num.a - num.b;
        num.a = num.a - num.b;
    }
    else
    {

        num.a = num.a - num.b;
        num.b = num.a + num.b;
        num.a = num.b - num.a;
    }
}

当然,我们还有更好的方法,就是使用异或运算符,我们知道,任何数与0异或后仍然为它本身,两个相同的数异或后为0。根本这种特性,可以有如下代码:

public static void swap5(Num num){
    num.a = num.a ^ num.b;
    num.b = num.a ^ num.b;
    num.a = num.a ^ num.b;
}

文章出自:http://www.cnblogs.com/nokiaguy/archive/2010/07/28/1787271.html

热心网友 时间:2022-04-23 12:44

是可以实现的!举一个简单的例子!
int a;int b;
a=a+b;//举例a=10,b=20,那么,现在a=30,b=20
b=a-b;//b=30-20=10
a=a-b;//a=30-10=20
//a=20,b=10.交换成功
不借用第三变量做数据交换的方法有很多,不过我就记住这一种!好像还有个异或运算也能实现!

热心网友 时间:2022-04-23 14:36

你可以进行如下操作:
int a;
int b;
a=a+b;//举例a=10,b=20,那么,现在a=30,b=20
b=a-b;//b=30-20=10
a=a-b;//a=30-10=20
//a=20,b=10.交换成功
个人方法,仅供参考!!

热心网友 时间:2022-04-23 16:44

是可以实现的!举一个简单的例子!
int a;int b;
a=a+b;//举例a=10,b=20,那么,现在a=30,b=20
b=a-b;//b=30-20=10
a=a-b;//a=30-10=20
//a=20,b=10.交换成功
不借用第三变量做数据交换的方法有很多,还有异或运算也能实现。

热心网友 时间:2022-04-23 19:08

int a=3, b=6;
a=a+b;
b=a-b;
a=a-b;

C语言可以实现,java你自己试吧 。

另外,位运算也可以实现,具体我也记不清了

热心网友 时间:2022-04-23 21:50

.....额.....不可能...- -这怎么可能呢....除非你两个数的值是引用对象...这才有可能实现你说的情况...这种情况下分别改变数的引用就可以了...[- -]

热心网友 时间:2022-04-24 00:48

public void test(int a, int b)
{
a = a + b;
b = a - b;
a = (a - b) / 2;
b = (a + b) / 2;
}

热心网友 时间:2022-04-24 04:02

为了保存两个数据就必须用一个中间变量来交换数据内容~

热心网友 时间:2022-04-24 07:34

使用位运算
例如:a,b是数字
a = a$b;
b= a&b;
a = a&b;

and运算通常用于二进制取位操作,例如一个数 and 1的结果就是取二进制的最末位。这可以用来判断一个整数的奇偶,二进制的最末位为0表示该数为偶数,最末位为1表示该数为奇数。
相同位的两个数字都为1,则为1;若有一个不为1,则为0。
00101
11100
(&;或者and)
----------------
00100

热心网友 时间:2022-04-24 11:22

做不到
java如何实现2个数之间互换

利用异或(a^b)^b 等于a,进行交互,不需要设置临时变量也不会超范围。代码如下:import java.util.Scanner;public class woo { public static void main(String args[]) { Scanner scan =new Scanner(System.in);System.out.println("输入两个数a, b");int a = scan.nextByte();int b = s...

用JAVA写“对两个整数变量的值进行互换(不需要第三方变量)”程序_百度...

public class Demo { public static void main(String [] args){ int m=2,n=3; //method_1(m, n); method_2(m, n); } /** * 使用异或^ *明白一个数,如果异或同一个数两次,那么就等于本身 */private static void method_3(int m, int n) { m...

Java笔试题 int a 和int b 如何不使用参数使他们的值交换

1.用异或:(推荐)a^=b;b^=a;a^=b;2.用加减:(数大的时候会溢出)a=a+b;b=a-b;a=a-b;还不明白hi我

java疑问(关于swap)

首先,if语句是可以没用else部分的。如果不需要,可以不加。sort函数想把3个数排列顺序,排序过程中通常会出现有些数据次序不对,需要交换。交换最常用最简单的方法就是:第三量&lt;==A,A&lt;==B,B&lt;==第三量。这时需要一个临时数据暂存要交换的数据之一。在此程序中,swap变量起的就是暂存作用。

写一个java程序 是两个数交换的程序。没有指针怎么做?

取临时变量作为存储:int tmp = 0,a=1,b=2;tmp = a;//将a的值赋值给临时变量tmp a = b;//将b的值赋值给a b = tmp;//将临时变量赋值给b

C语言中,怎样不用中间变量而互换两个变量的值呢?

有两种方式可以不使用中间变量,交换同类型的变量a,b的值:1 .使用加法操作a+=b; b=a-b;a -= b;2 .使用异或操作:a^=b;b^=a;a^=b;C语言运算符是说明特定操作的符号, 它是构造C语言表达式的工具。C语言的运算异常丰富,除了控制语句和输入输出以外的几乎所有的基本操作都为运算符处理。除...

...的初始值是num1=25num2=16编写程序实现两数交换即变量num1存放的数...

已知变量的初始值是num1=25num2=16编写程序实现两数交换即变量num1存放的数 已知变量的初始值是num1=25num2=16编写程序实现两数交换即变量num1存放的数值是16变量num2存放的数值是25java程序... 已知变量的初始值是num1=25num2=16编写程序实现两数交换即变量num1存放的数值是16变量num2存放的数值是25 ...

java如何交换a和b的值

是两个变量的值吗 用一个中间变量temp就行了 temp=a a=b b=temp

java比较任意两个数,一个大于另一个交换,不然不换 输出结果

int a=xxx;int b=xxx;int max=0;if(a&gt;b){ max=a;a=b;b=max;}

java数字交换,int a=6;,int b=7; c=a;a=b;b=c;,这样就是实现了数字交换...

第一 你要理解每一个变量都是一个单独的空间。 在对基本类型赋值的时候 传递的是值,而不是地址。所以 a=6,b=7 c=a;此时 c=6 a=6 b=7;a=b;此时 c=6 a=7 b=7;b=c;此时 c=6 a=7 b=6;

java用方法交换两个数 java中交换两个数的值 java如何交换a和b的值 java如何交换对象 java交换两个数 java交换两个变量 java实现两个数的交换 Java数组之间交换位置 Java两表数据大数据量比对
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
孔子周游列国坐的什么车? 高内聚 ,低耦合 到底是什么意思? 高内聚低耦合的设计原则 清爽百合虾仁 高内聚低耦合原则 4题求详细解答,高中数学题 ...JAVA项目中各自功能与优点,他们之间的联系是什么? ...是pl/sql写好了,但是不是我们写哦,我想问各位java程序猿们,你们写吗... 核桃分心木泡几次水合适 核桃分心木泡多少次水合适 灯为什么不是短路 店内上保险,都有哪些 java如何实现2个数之间互换 请问24小时加盟便利店如何购买保险 java 数据交换方法 店铺怎么保险?保费大概多少? java的数据交换 店铺的保险金是什么 淘宝现在是不是没有退运保险了,我买东西都找不到退运保险在哪里了 Java 两个项目之间如何传数据 因datatraveler2.0的问题用不了U盘怎么办 请问可以给店铺买保险吗?保财产损失盗抢方面的,哪家公司可以买? Java 中实例化后的对象间如何交互传递数据? 针对店铺有什么保险 java程序中,怎么互换2个变量的值? 欢天喜地七仙女的灵石全图谁知道哪有 店铺财产保险 java 如何实现两个程序的数据传递. 泰戈尔的诗 使生如夏花之绚烂,死如秋叶之静美 就这一句? 店铺怎么保险?保费大概多少 java进程和另外一个java进程交换数据,可用什么方法? 如果是java和C++进程交换数据,又可以用什么方法? php程序与java程序之间做数据交互,怎么做 Java中实现类交换的方法 如何在Java中实现交换两个变量值的方法 java哪些方式可以与异构系统交换数据 word文档怎么解除密码 word文档解除密码 华为手环在开启导航模式时能接电话吗? 苹果6s手机用耳机时突然有很响的刺啦声是怎么回事? 苹果耳机耳机有吱吱响声,但是有声音。一弹就会好,这是什么情况? 苹果耳机插上,里面就乌拉乌拉响怎么回事? iphone5的耳机晃动起来里面会有响声是怎么回事 苹果手机插入耳机有滋滋声音是什么原因? 苹果耳机单边响怎么办 为什么苹果耳机仓会响 iPhone7耳机有噪音是怎么回事 新买的苹果6耳机沙沙的响 苹果11耳机吱吱响? 春日的寓意 《春日》这首诗的意思是什么? 春日蕴含了怎样的哲理