引言
现在来实现一个非常实用的Java编程案例——货币单位转换器。
案例:人民币与美元互转
编写程序,实现人民币和美元之间的相互转换。
# 源文件保存为“CurrencyConverter.java”。
import java.util.Scanner;
public class CurrencyConverter {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请选择转换方向:");
System.out.println("1. 人民币 → 美元");
System.out.println("2. 美元 → 人民币");
System.out.print("请输入选项:");
int choice = scanner.nextInt();
System.out.print("请输入金额:");
double amount = scanner.nextDouble();
// 假设汇率是1美元=6.8人民币
final double EXCHANGE_RATE = 6.8;
if (choice == 1) {
double usd = amount / EXCHANGE_RATE;
System.out.printf("%.2f 人民币 = %.2f 美元\n", amount, usd);
} else if (choice == 2) {
double rmb = amount * EXCHANGE_RATE;
System.out.printf("%.2f 美元 = %.2f 人民币\n", amount, rmb);
} else {
System.out.println("无效选项!");
}
scanner.close();
}
}
运行结果
依次输入1
和10
,会得到:
请选择转换方向:
- 人民币 → 美元
- 美元 → 人民币 请输入选项:1 请输入金额:10 10.00 人民币 = 1.47 美元
代码解析:
- 使用
Scanner
类获取用户输入 - 定义常量
EXCHANGE_RATE
存储汇率 - 根据用户选择执行不同方向的转换
- 人民币转美元用除法,美元转人民币用乘法
- 使用
printf
格式化输出,保留两位小数 - 最后别忘了关闭
Scanner
对象
案例:多国货币转换器
编写程序,实现多种货币的转换。
# 源文件保存为“MultiCurrencyConverter.java”。
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class MultiCurrencyConverter {
private static Map<String, Double> exchangeRates = new HashMap<>();
static {
// 初始化汇率数据(以人民币为基准)
exchangeRates.put("USD", 0.147); // 1人民币=0.147美元
exchangeRates.put("EUR", 0.134); // 1人民币=0.134欧元
exchangeRates.put("JPY", 19.8); // 1人民币=19.8日元
exchangeRates.put("GBP", 0.116); // 1人民币=0.116英镑
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("支持转换的货币:");
for (String currency : exchangeRates.keySet()) {
System.out.println(currency);
}
System.out.print("请输入原始货币代码:");
String fromCurrency = scanner.next().toUpperCase();
System.out.print("请输入目标货币代码:");
String toCurrency = scanner.next().toUpperCase();
System.out.print("请输入金额:");
double amount = scanner.nextDouble();
if (!exchangeRates.containsKey(fromCurrency) || !exchangeRates.containsKey(toCurrency)) {
System.out.println("不支持的货币类型!");
return;
}
// 转换为人民币
double cny = amount / exchangeRates.get(fromCurrency);
// 从人民币转换为目标货币
double result = cny * exchangeRates.get(toCurrency);
System.out.printf("%.2f %s = %.2f %s\n", amount, fromCurrency, result, toCurrency);
scanner.close();
}
}
运行结果
依次输入EUR
、USD
和100
,会得到:
支持转换的货币: JPY EUR GBP USD 请输入原始货币代码:EUR 请输入目标货币代码:USD 请输入金额:100 100.00 EUR = 109.70 USD
代码解析:
- 使用
HashMap
存储汇率数据 - 静态初始化块初始化汇率数据
- 显示支持的货币类型
- 用户输入原始货币、目标货币和金额
- 先转换为人民币,再转换为目标货币
案例:古代货币换算
古代金银铜钱的换算,1两黄金=10两白银=10000文铜钱。编写程序,实现古代货币的换行。
# 源文件保存为“AncientCurrency.java”。
public class AncientCurrency {
public static void main(String[] args) {
double gold = 2.5;
double silver = gold * 10;
double copper = gold * 10000;
System.out.printf("%.2f 两黄金 = %.2f 两白银 = %.2f 文铜钱\n", gold, silver, copper);
// 反向计算验证
double gold2 = copper / 10000;
System.out.printf("反向验证:%.2f 文铜钱 = %.2f 两黄金\n", copper, gold2);
}
}
运行结果
2.50 两黄金 = 25.00 两白银 = 25000.00 文铜钱 反向验证:25000.00 文铜钱 = 2.50 两黄金
代码解析:
- 黄金转白银乘以10,转铜钱乘以10000
- 2.5两黄金=25两白银=25000文铜钱
- 反向计算验证结果正确
案例:带手续费的货币转换
实际兑换时银行会收手续费。编写程序,实现带手续费的货币转换。
# 源文件保存为“CurrencyWithFee.java”。
import java.util.Scanner;
public class CurrencyWithFee {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入兑换金额:");
double amount = scanner.nextDouble();
System.out.print("请输入汇率:");
double rate = scanner.nextDouble();
System.out.print("请输入手续费率(%):");
double feePercent = scanner.nextDouble();
double fee = amount * feePercent / 100;
double converted = (amount - fee) * rate;
System.out.printf("实际兑换金额:%.2f\n", converted);
System.out.printf("手续费:%.2f\n", fee);
scanner.close();
}
}
运行结果
依次输入1000
、6.8
和1
,会得到:
请输入兑换金额:1000 请输入汇率:6.8 请输入手续费率(%):1 实际兑换金额:6732.00 手续费:10.00
代码解析:
- 手续费按兑换金额的百分比计算
- 实际兑换金额要扣除手续费
- 输出实际兑换金额和手续费
实践练习题
练习:货币兑换计算器 编写一个程序,实现带用户界面的简单计算器。
# 源文件保存为“CurrencyCalculator.java”。
import java.util.Scanner;
public class CurrencyCalculator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("=== 货币兑换计算器 ===");
System.out.println("1. 人民币 → 美元");
System.out.println("2. 美元 → 人民币");
System.out.println("3. 人民币 → 欧元");
System.out.println("4. 欧元 → 人民币");
System.out.print("请选择:");
int choice = scanner.nextInt();
System.out.print("请输入金额:");
double amount = scanner.nextDouble();
double result = 0;
switch (choice) {
case 1: result = amount / 6.8; break;
case 2: result = amount * 6.8; break;
case 3: result = amount / 7.5; break;
case 4: result = amount * 7.5; break;
default: System.out.println("无效选择!");
}
if (choice >= 1 && choice <= 4) {
String[] units = {"美元", "人民币", "欧元", "人民币"};
System.out.printf("兑换结果:%.2f %s\n", result, units[choice-1]);
}
scanner.close();
}
}
运行结果
依次输入3
和1000
,会得到:
=== 货币兑换计算器 ===
- 人民币 → 美元
- 美元 → 人民币
- 人民币 → 欧元
- 欧元 → 人民币 请选择:3 请输入金额:1000 兑换结果:133.33 欧元
代码解析:
- 提供简单的菜单界面
- 使用switch-case处理不同兑换方向
- 根据用户选择执行不同计算
- 输出格式化的兑换结果