「Java案例」古代重量单位转换

阅读 17

06-29 06:00

引言

现在来实现一个有趣的编程练习——古代重量单位转换。

案例:斤两转换

古代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两

代码解析

  1. 使用Scanner类获取用户输入
  2. 斤和两的换算很简单,直接乘以16
  3. printf方法用于格式化输出,保留两位小数
  4. 最后要关闭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();
    }
}

运行结果 依次输入12斤,会得到:

请选择转换方向: 1.斤 → 两/钱/分 2..分 → 钱/两/斤 请输入选项:1 请输入斤数:2 2.000斤 = 32.000两 = 320.000钱 = 3200.000分

代码解析

  1. 程序提供了两种转换的选择
  2. 根据用户选择执行不同的计算逻辑
  3. 向上转换是乘法,向下转换是除法
  4. 使用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();
    }
}

运行结果 依次输入110,会得到:

请选择: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()检查输入是否为有效数字
  • 检查输入是否为负数
  • 只有有效输入才会执行换算

精彩评论(0)

0 0 举报