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个数排列顺序,排序过程中通常会出现有些数据次序不对,需要交换。交换最常用最简单的方法就是:第三量<==A,A<==B,B<==第三量。这时需要一个临时数据暂存要交换的数据之一。在此程序中,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>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;