题目
读入两个整数,分别用(1)临时变量、(2)不用第三个变量两种方式交换后输出。
思路
临时变量法:t=a; a=b; b=t;。无第三变量可写加减法或异或交换(两法各写一段或两个程序视题面要求);输出交换后的 a、b 验证。
解题分析
交换两值本质是保存其中一个,再把另一个写回去。临时变量最直观,也适用于浮点和任意类型。不用第三个变量时,加减法和异或都在整数范围内常用,但要先看会不会溢出、是不是同一块内存。
- 临时变量:无溢出顾虑,可读性最好,实际工程里优先用它。
- 加减法:仅当两数之和(差)在类型范围内才安全,浮点别用。
- 异或:要求整型且
x、y不是同一地址;逻辑清楚,面试里爱问。
完整程序
import java.io.*;
public class Main {
public static void main(String[] args) {
int a = 3, b = 7;
System.out.println("原值: " + a + " " + b);
int t = a; a = b; b = t;
System.out.println("临时变量交换后: " + a + " " + b);
a ^= b; b ^= a; a ^= b;
System.out.println("异或交换后: " + a + " " + b);
}
}
运行示例
输出:
原值: 3 7
临时变量交换后: 7 3
异或交换后: 3 7其它写法
下面每种写法都是完整程序,输入输出格式与正文一致,便于对照。
加减法交换
不用临时变量;注意大数可能溢出,工程里仍推荐临时变量。
程序:
public class Main {
public static void main(String[] args) {
int a = 3, b = 7;
System.out.println("原值: " + a + " " + b);
a = a + b;
b = a - b;
a = a - b;
System.out.println("加减法交换后: " + a + " " + b);
}
}
运行示例
输出:
原值: 3 7
加减法交换后: 7 3