一贱书生

# 不用第三个变量就能交换两个变量值

package cglib;

import java.util.Stack;

public class jiekou {

//第1种办法
public void changeMethodA(int a, int b){
System.out.println("changeMethodA交换之前\ta:"+a+"\tb:"+b);
a = a + b - (b = a);
System.out.println("changeMethodA交换之后\ta:"+a+"\tb:"+b);
}
//第2种办法
public void changeMethodB(int a, int b){
System.out.println("changeMethodA交换之前\ta:"+a+"\tb:"+b);
b = a + (a = b)*0;
System.out.println("changeMethodA交换之后\ta:"+a+"\tb:"+b);
}

/** 它的原理是：把a、b看做数轴上的点，围绕两点间的距离来进行计算。

* @param args
*/

public void shift(){

int a,b;
a=10;b=12;
a=b-a; //a=2;b=12
b=b-a; //a=2;b=10
a=b+a; //a=12;b=10

System.out.println("a = " + a);
System.out.println("b = " + b);
}
/** 通过“+”运算符将a和b的运算结果赋给了a（这时a是中间变量）。然后再计算b，这时a的值已经是（a+b）了，
* 因此，a再减b就是原来的a。 而这时b已经是原来的a了，
* 因此，再用运算后的a（实际上是a+b）减运算后的b（实际上是原来的a），
* 就是原来的b了，最后将这个b赋值给a。
* @param args
*/
public void shift1(){

int a = 13;
int b = 21;

a = a + b;  //a=34,b=21
b = a - b;  //a=34,b=13
a = a - b;  //a=21,b=13

System.out.println("a = " + a);
System.out.println("b = " + b);
}

public  void swap2()
{
int a = 2;
int b = 5;

if(a*b<=0){

System.out.println("值不能有0");
}

a = a * b;//a=10,b=5
b = a / b;//a=10,b=2
a = a / b;//a=5,b=2
System.out.println("a = " + a);
System.out.println("b = " + b);
}
public  void swap3()
{
int a = 7;
int b = 8;

a = a - b;//a=-1,b=8
b = a + b;//a=-1,b=7
a = b - a;//a=8,b=7
System.out.println("a = " + a);
System.out.println("b = " + b);
}

public  void swap5()
{
int a = 3; //011
int b = 4; //100

a = a ^ b;//a=011^100=111,b=100
b = a ^ b;//a=111,b=111^100=011
a = a ^ b;//a=111^011=100,b=011

System.out.println("a = " + a);
System.out.println("b = " + b);
}

public void exchange(int x,int y)
{
Stack<Integer> s = new Stack<>();
s.push(x);
s.push(y);
x=(int) s.pop();
y=(int) s.pop();

System.out.println("x = " + x);
System.out.println("y = " + y);

}

public void exchange2(String a,String b)
{
a=a.concat(b);
System.out.println("将b粘贴到a后面，a = " + a);
b=a.replace("b","");
System.out.println("b被空格替换后b = " + b);
a=a.replace("a","");
System.out.println("a被空格替换后a = " + a);

System.out.println("最后a = " + a);
System.out.println("最后b = " + b);

}

public void exchange3(String a,String b)
{
//先转成int,然后用上面的
//   a=a+b;
//   b=a-b;
//   a=a-b; 最后再转成String
a = ( b + a ).substring(0,(b + ( b = a)).lastIndexOf(a)) ;

System.out.println("a = " + a);
System.out.println("b = " + b);

}

public static void main(String[] args) {
jiekou m = new jiekou();
m.shift();
m.shift1();
m.swap2();
m.swap3();
m.swap5();
m.changeMethodA(19,20);
m.changeMethodB(57,75);
m.exchange(2,10);
m.exchange2("a","b");
m.exchange3("a","b");
}
}

a = 12
b = 10
a = 21
b = 13
a = 5
b = 2
a = 8
b = 7
a = 4
b = 3
changeMethodA交换之前    a:19    b:20
changeMethodA交换之后    a:20    b:19
changeMethodA交换之前    a:57    b:75
changeMethodA交换之后    a:75    b:57
x = 10
y = 2

b被空格替换后b = a
a被空格替换后a = b

a = b
b = a

1）加减法、乘除法、异或法

2）使用中间变量（指针、引用）

3）当要求不使用指针，并且不使用中间变量时，只能使用异或法

4）当是浮点数时，不能使用异或法

5）当b为0时，不能使用乘除法

### 一贱书生

nanchen2251
2018/07/03
0
0
win7中java编程工具安装 java环境变量设置

win7中java编程工具安装 java环境变量设置 Question：编译是显示'javac'不是内部或外部命令，也不是可运行的程序或批处理文件 解决： 在【系统变量】里编辑javahome、classpath、path环境变量...

2014/03/07
0
0
【Java】几道让你拿offer的知识点

Java3y
2018/08/02
0
0
win10安装jdk8 配置环境变量 听语音

win10安装jdk8 配置环境变量 听语音 | 浏览：6121 | 更新：2017-11-20 15:43 1 2 3 4 5 6 7 分步阅读 网上关于win10 jdk安装、配置环境变量的经验有很多，但是按照方法配置后出现了运行javac...

linjin200
2018/12/23
0
0
Java基础|Java特性与HelloWorld运行流程

【Java基础】 Java语言特点：（着重了解两个）开源、跨平台。 跨平台如何实现：通过JVM实现，JVM充当Java和不同OS之间的翻译器，不同OS对应不同JVM。 Java语言的平台：JavaSE、JavaME(Androi...

darlingwood2013
2018/05/29
0
0

Class 文件结构

https://www.cnblogs.com/honghuzidelaoren/p/3622021.html

Java搬砖工程师
14分钟前
2
0

\$ Inside the Linux Kernel 与知乎出产 一张漫画看懂Linux系统结构

14分钟前
1
0
Android人脸识别Demo竖屏YUV方向调整和图片保存

18分钟前
1
0

30分钟前
1
0

yepanl
36分钟前
2
0