三种交换思想
交换两个数的值,比如a和b,如果我们要交换a和b的值,下面我们介绍三种方法
1.建立一个临时变量temp,交换ab
public static void main(String[] args) {
int a=8,b=3;
System.out.println("交换前");
System.out.println("a="+a+"\nb="+b);
int temp=0;
temp=a;
a=b;
b=temp;
System.out.println("交换后");
System.out.println("a="+a+"\nb="+b);
}
如上代码所示,很好理解
2.不建立临时变量,数值相加的思想
int a=8,b=3;
/*
11=8+3
8=11-3
3=11-8
*/
//这种思想,可以写出以下代码
public static void main(String[] args) {
int a=8,b=3;
System.out.println("交换前");
System.out.println("a="+a+"\nb="+b);
a=a+b;//a+b的和不能超出int的范围
b=a-b;
a=a-b;
System.out.println("交换后");
System.out.println("a="+a+"\nb="+b);
}
这个思想的局限是a和b在int的取值范围之内,而a与b的和超出了int的取值范围,导致程序出错。
3.用亦或的方法,a两次亦或同一个数还等于a
public static void main(String[] args) {
int a=8,b=3;
System.out.println("交换前");
System.out.println("a="+a+"\nb="+b);
a=a^b;//这种思想就不用考虑到超出范围的问题了
b=a^b;
a=a^b;
System.out.println("交换后");
System.out.println("a="+a+"\nb="+b);
}
与第二种思想相比,不需要考虑到操作int取值范围的问题了
以上运行结果都如下所示,实现了a和b值的交换