題目一:三門課程總分與平均分
import java.util.Scanner;
public class ScoreStats {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("輸入課程1成績: ");
double score1 = sc.nextDouble();
System.out.print("輸入課程2成績: ");
double score2 = sc.nextDouble();
System.out.print("輸入課程3成績: ");
double score3 = sc.nextDouble();
double total = score1 + score2 + score3;
double average = total / 3.0;
// 保留小數點後一位
System.out.printf("總分: %.1f, 平均分: %.1f%n", total, average);
// 或
// System.out.println("總分: " + String.format("%.1f", total) +
// ", 平均分: " + String.format("%.1f", average));
}
}
題目二:兩整數交換 (不借助第三變量 / 借助第三變量)
方法一:借助第三變量 (標準、通用、安全)
int a = 10, b = 20;
int temp = a;
a = b;
b = temp;
// 結果: a=20, b=10
方法二:不借助第三變量 - 算術運算
int a = 10, b = 20;
a = a + b; // a=30
b = a - b; // b=10 (原 a)
a = a - b; // a=20 (原 b)
// 風險: 整數溢出 (a+b 超過 Integer.MAX_VALUE)
方法三:不借助第三變量 - 位運算 (XOR)
int a = 10, b = 20;
a = a ^ b;
b = a ^ b; // b = (a^b)^b = a
a = a ^ b; // a = (a^b)^a = b
// 優點: 無溢出風險、無臨時變量
// 缺點: 僅適用整數、可讀性差、現代編譯器優化下無性能優勢
完整演示程序
public class SwapDemo {
public static void main(String[] args) {
// 算術交換
int a = 10, b = 20;
System.out.println("算術交換前: a=" + a + ", b=" + b);
a = a + b;
b = a - b;
a = a - b;
System.out.println("算術交換後: a=" + a + ", b=" + b);
// 位運算交換
a = 10; b = 20;
System.out.println("XOR交換前: a=" + a + ", b=" + b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println("XOR交換後: a=" + a + ", b=" + b);
// 第三變量交換 (推薦)
a = 10; b = 20;
System.out.println("臨時變量交換前: a=" + a + ", b=" + b);
int temp = a;
a = b;
b = temp;
System.out.println("臨時變量交換後: a=" + a + ", b=" + b);
}
}
最佳實踐建議
| 場景 | 推薦方法 | 理由 |
| 一般業務代碼 | 第三變量 | 可讀性最好、無副作用、編譯器優化同樣高效 |
| 嵌入式/寄存器極少 | XOR | 節省一個寄存器 |
| 浮點數交換 | 第三變量 | 算術/XOR 不適用浮點數 |
| 面試展示技巧 | XOR/算術 | 展示位運算/數學理解 |