引言
现在来实现一个有趣的编程练习——古代重量单位转换。
案例:斤两转换
古代1斤等于16两,这个换算关系一直沿用到近代。编写程序实现进行古代斤两的转换,输入斤,转换为对应的两,后格式化打印输出。
# 源文件保存为“JinLiangConverter.java”。
import java.util.Scanner;
public class JinLiangConverter {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入要转换的重量(斤):");
double jin = scanner.nextDouble();
// 1斤 = 16两
double liang = jin * 16;
System.out.printf("%.2f斤 = %.2f两\n", jin, liang);
scanner.close();
}
}
运行结果
输入2
斤,会得到:
请输入要转换的重量(斤):2 2.00斤 = 32.00两
代码解析:
- 使用
Scanner
类获取用户输入 - 斤和两的换算很简单,直接乘以16
printf
方法用于格式化输出,保留两位小数- 最后要关闭
Scanner
对象
案例:多种单位转换
编写程序,进行更多的古代重量单位:斤、两、钱、分的转换。换算关系是:1斤=16两,1两=10钱,1钱=10分。
# 源文件保存为“AncientWeightConverter.java”。
import java.util.Scanner;
public class AncientWeightConverter {
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();
if (choice == 1) {
System.out.print("请输入斤数:");
double jin = scanner.nextDouble();
double liang = jin * 16;
double qian = liang * 10;
double fen = qian * 10;
System.out.printf("%.3f斤 = %.3f两 = %.3f钱 = %.3f分\n", jin, liang, qian, fen);
} else if (choice == 2) {
System.out.print("请输入分数:");
double fen = scanner.nextDouble();
double qian = fen / 10;
double liang = qian / 10;
double jin = liang / 16;
System.out.printf("%.3f分 = %.3f钱 = %.3f两 = %.3f斤\n", fen, qian, liang, jin);
} else {
System.out.println("无效选项!");
}
scanner.close();
}
}
运行结果
依次输入1
和2
斤,会得到:
请选择转换方向: 1.斤 → 两/钱/分 2..分 → 钱/两/斤 请输入选项:1 请输入斤数:2 2.000斤 = 32.000两 = 320.000钱 = 3200.000分
代码解析:
- 程序提供了两种转换的选择
- 根据用户选择执行不同的计算逻辑
- 向上转换是乘法,向下转换是除法
- 使用
printf
格式化输出,保留三位小数
案例:长度单位转换(丈尺寸)
古代长度单位换算:1丈=10尺,1尺=10寸。编写程序,输入长度(尺),将它转换为丈和寸,并格式化输出。
# 源文件保存为“LengthConverter.java”。
import java.util.Scanner;
public class LengthConverter {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入长度(尺):");
double chi = scanner.nextDouble();
double zhang = chi / 10;
double cun = chi * 10;
System.out.printf("%.2f尺 = %.2f丈 = %.2f寸\n", chi, zhang, cun);
scanner.close();
}
}
运行结果
输入15
尺,会得到:
请输入长度(尺):15 15.00尺 = 1.50丈 = 150.00寸
代码解析:
- 尺和丈的换算是除以10
- 尺和寸的换算是乘以10
案例:容量单位转换(斗升合)
古代容量单位换算:1斗=10升,1升=10合。编写程序,将2.5斗转换为升和合,并格式化输出。
# 源文件保存为“CapacityConverter.java”。
public class CapacityConverter {
public static void main(String[] args) {
double dou = 2.5;
double sheng = dou * 10;
double ge = sheng * 10;
System.out.println(dou + "斗 = " + sheng + "升 = " + ge + "合");
// 反向计算验证
double dou2 = ge / 100;
System.out.println("反向验证结果:" + dou2 + "斗");
}
}
运行结果
2.5斗 = 25.0升 = 250.0合 反向验证结果:2.5斗
代码解析:
- 展示了正向和反向的单位换算
- 验证了换算公式的正确性
- 使用简单的乘法除法运算
案例:面积单位换算(亩分厘)
古代面积单位换算:1亩=10分,1分=10厘。编写程序,进行面积单位换算,并格式化输出。
# 源文件保存为“AreaConverter.java”。
import java.util.Scanner;
public class AreaConverter {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请选择:1.亩→分→厘 2.厘→分→亩");
int choice = scanner.nextInt();
if (choice == 1) {
System.out.print("请输入亩数:");
double mu = scanner.nextDouble();
System.out.println(mu + "亩 = " + (mu*10) + "分 = " + (mu*100) + "厘");
} else if (choice == 2) {
System.out.print("请输入厘数:");
double li = scanner.nextDouble();
System.out.println(li + "厘 = " + (li/10) + "分 = " + (li/100) + "亩");
} else {
System.out.println("输入错误!");
}
scanner.close();
}
}
运行结果
依次输入1
和10
,会得到:
请选择:1.亩→分→厘 2.厘→分→亩 1 请输入亩数:10 10.0亩 = 100.0分 = 1000.0厘
代码解析:
- 提供两种换算方向的选择
- 根据选择执行不同的计算路径
- 展示了条件语句与单位换算的结合
实践练习题
练习:货币单位换算(金银兑换) 古代货币换算:1两黄金=10两白银=10000文铜钱。编写程序,实现输入黄金数量转换为白银和铜钱的数量,并格式化输出。
# 源文件保存为“CurrencyConverter.java”。
import java.util.Scanner;
public class CurrencyConverter {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入黄金数量(两):");
double gold = scanner.nextDouble();
double silver = gold * 10;
double copper = gold * 10000;
System.out.printf("%.2f两黄金 = %.2f两白银 = %.2f文铜钱\n", gold, silver, copper);
scanner.close();
}
}
运行结果
输入3
,会得到:
请输入黄金数量(两):3 3.00两黄金 = 30.00两白银 = 30000.00文铜钱
代码解析:
- 实现了金银铜三种货币的换算
- 使用乘法进行单位转换
- 格式化输出保留两位小数
练习:时间单位换算(时辰刻) 古代时间单位:1天=12时辰,1时辰=8刻。编写程序,将2.5天转化为多少个时辰零多少刻。
# 源文件保存为“TimeConverter.java”。
public class TimeConverter {
public static void main(String[] args) {
double days = 2.5;
double shichen = days * 12;
double ke = shichen * 8;
System.out.println(days + "天 = " + shichen + "时辰 = " + ke + "刻");
// 计算每个时辰相当于现在多少小时
double hoursPerShichen = 24 / 12;
System.out.println("每个时辰相当于现代" + hoursPerShichen + "小时");
}
}
运行结果
2.5天 = 30.0时辰 = 240.0刻 每个时辰相当于现代2.0小时
代码解析:
- 将天数转换为时辰和刻
- 额外计算了古代时辰相当于现代多少小时
- 展示了复合单位的换算方法
练习:重量单位转换(带校验)
增强版的重量转换,加入输入校验。
# 源文件保存为“WeightConverterWithValidation.java”。
import java.util.Scanner;
public class WeightConverterWithValidation {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入要转换的重量(斤):");
if (scanner.hasNextDouble()) {
double jin = scanner.nextDouble();
if (jin >= 0) {
double liang = jin * 16;
double qian = liang * 10;
System.out.println(jin + "斤 = " + liang + "两 = " + qian + "钱");
} else {
System.out.println("重量不能为负数!");
}
} else {
System.out.println("请输入有效的数字!");
}
scanner.close();
}
}
运行结果
输入-6
,会得到:
请输入要转换的重量(斤):-6 重量不能为负数!
代码解析:
- 使用
hasNextDouble()
检查输入是否为有效数字 - 检查输入是否为负数
- 只有有效输入才会执行换算