题目

读入两个整数,分别用(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