public class Cab { public static void main(String[] args){ int a=1; int b=2; a=a+b; b=a-b; a=a-b; System.out.println("a="+a+"b="+b); }} //输出a=2b=1
晕.我说的是字符串,你怎么变为字符了呢? String a = "aaa"; String b = "bbb";a = a + b; b = a - b; a = a - b; 请问这个成立吗?至少到现在为止,java还没有出现字符串相减的吧? 对于字符串,下面才是正解: a = a + b; b = a.replace(b, ""); a = a.replace(b, ""); 对于其它类型的,就不一而足了,对于整型,一楼是正解(2楼也行),但如果说要通用的,我还是那句话,这是不可能的! 整型和字符串或字符型可能能做个通用的,但若其它类型也能做到通用,那我只能服了你了. 高手继续扔砖头吧,呵
int a=1; int b=2;a=2; b=1;printf("a=2,b=1"); 这才是正解
还是这个方法好,对int型的最大值最小值照样不会出错,强
int a = 1; int b = 2; System.out.println("=a="+a+"=b="+b); a = a<<1; b = b>>1; System.out.println("=a="+a+"=b="+b);
面试题 a=a+b b=a-b a=a-b
package com;public class Test { public static void main(String[] args) { int a = 1; int b = 2; a = a ^ b; b = b ^ a; a = a ^ b; System.out.println(a); System.out.println(b); a = a + b; b = a - b; a = a - b; System.out.println(a); System.out.println(b); } }
a=a^b
b=b^a
a=a^b
b=a-1;
结果:a=2,b=1
呵....
从理论上分析,不用中间变量作中介,这是不可能完成的任务,就如两杯水,没有第三只杯子,你能相互倒来倒去吗?
如果:a="a";b="b";
能这样加来减去的么?
变量也不一定是字符串,单个字符或其它对象变量也行吧?多的呢,没有临时的中间变量,不可能有通用的方法的.
虽然我觉得3楼的方法可能会通用一点
如果是这样那就简单了。
a=2
b=1
搞定。
int b = 99;
System.out.println(a);
System.out.println(b);
a = a + b;
b = a - b;
a = a - b;
System.out.println(a);
System.out.println(b);
这方法很好呀,通用
b=a ^op b;
a=a ^op b;
1楼正解。3楼的兄弟,没有中间变量,依然可以互换的。这个算法不止适合int,char类型依然可以,如:
char a = 'c',b = 'f';
a = (char)(a + b);
b = (char)(a - b);
a = (char)(a - b);
object o1;
object o2;
o1,o2互换
public class Cab {
public static void main(String[] args){
int a=1;
int b=2;
a=a+b;
b=a-b;
a=a-b;
System.out.println("a="+a+"b="+b);
}}
//输出a=2b=1
晕.我说的是字符串,你怎么变为字符了呢?
String a = "aaa";
String b = "bbb";a = a + b;
b = a - b;
a = a - b;
请问这个成立吗?至少到现在为止,java还没有出现字符串相减的吧?
对于字符串,下面才是正解:
a = a + b;
b = a.replace(b, "");
a = a.replace(b, ""); 对于其它类型的,就不一而足了,对于整型,一楼是正解(2楼也行),但如果说要通用的,我还是那句话,这是不可能的!
整型和字符串或字符型可能能做个通用的,但若其它类型也能做到通用,那我只能服了你了.
高手继续扔砖头吧,呵
push a
push b
pop a
pop b
还是用这个好吧
a=a^b
b=b^a
a=a^b 下面这个虽然也是可以,但是有范围限制的
a=a+b
b=a-b
a=a-b
b = b^a;
a = a^b;
a = a^b;
b = a^b;
a = a^b;
如果楼主是这样写的,int a=1;int b=2,那答案早有了.如果是这样写的,double a=1;double b=2;上面的答案显然不大行吧?
<script type="text/javascript">
var a = 1,b = 2;
a = [b,b=a][0];
alert(a);
alert(b);
</script>
我的理解是内存空间,
你不申请新的内存空间如何交换2个变量?
无论是a=a+b还是a=a.replace(b,''),好像都开辟了新的内存空间了吧,只是没起第三个变量名而已吧~比如整形变量
a=x,b=ya=a+b内存中必定要分配一个新的空间存放x+y
b=a-b
a=a-b
和
c=a+b
b=c-b
a=c-b
对内存空间来说,有区别吗?
高手指教,对不对、?
b=b^a
a=a^b
String a;
String b;
a=b+a;
b=a.substring(b.length);
a=a.substring(0,b.length);//返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。因此,该子字符串的长度为 endIndex-beginIndex。
a=a+b是不会分配新的内存空间的,a+b的结果直接就存放在a的内存空间里
c=a+b必然会分配内存给c,但这不意味着是为a+b分配的内存空间
如果按照你的意思,那c=a+b不是要占4年变量的内存空间了 *_*
b=b^a
a=a^b
这个方法要比用算术运算的方法好
不但可以避免溢出的问题,而且通用性更好
因为这个算法是交换了两个内存的值
而不是凑巧运算出来的
a=b+a;
b=a.substring(0,b.length+1);
a=a.substring(b.length);
int b=2;a=2;
b=1;printf("a=2,b=1");
这才是正解
还是这个方法好,对int型的最大值最小值照样不会出错,强
int b = 2;
System.out.println("=a="+a+"=b="+b);
a = a<<1;
b = b>>1;
System.out.println("=a="+a+"=b="+b);
a=a+b
b=a-b
a=a-b
package com;public class Test
{
public static void main(String[] args)
{
int a = 1;
int b = 2; a = a ^ b;
b = b ^ a;
a = a ^ b;
System.out.println(a);
System.out.println(b); a = a + b;
b = a - b;
a = a - b;
System.out.println(a);
System.out.println(b);
}
}