|
|
1 month ago | |
|---|---|---|
| W1-梁凯雄-202402050120 | 1 month ago | |
| w1 | 1 month ago | |
| AI协助记录.txt | 1 month ago | |
| README.md | 1 month ago | |
| TemperatureConverter.java | 1 month ago | |
| 程序运行输出文本.txt | 1 month ago | |
README.md
温度转换器 - 完整使用指南
📋 目录
概述
温度转换器是一个功能完整的Java程序,支持摄氏度(Celsius)和华氏度(Fahrenheit)之间的互相转换。
支持三种工作模式:
- 命令行参数模式 - 直接在命令行传入温度和单位
- 批量转换模式 - 从文件读取温度数据进行批量处理
- 交互式模式 - 实时输入温度数据,获得智能纠正提示
特性
✨ 核心功能
- ✅ 摄氏度 ↔ 华氏度 双向转换
- ✅ 精确到小数点后两位
- ✅ 三种灵活的使用模式
- ✅ 智能的错误诊断和纠正建议
🎯 转换公式
| 方向 | 公式 |
|---|---|
| 摄氏 → 华氏 | F = C × 9/5 + 32 |
| 华氏 → 摄氏 | C = (F - 32) × 5/9 |
🚀 加分项(已实现)
-
✅ 命令行参数模式
- 支持
java TemperatureConverter 36.6 C - 自动识别粘连格式(如
36.6c)
- 支持
-
✅ 批量转换模式
- 从文件读取多行温度数据
- 支持注释行和空行
- 提供转换统计
-
✅ 交互模式智能纠正
- 自动识别和修复粘连单位
- 缺少单位时给出具体提示
- 无效输入时指出问题所在
使用方法
1️⃣ 命令行参数模式
最快速的使用方式 - 单行转换,无需等待
语法
java TemperatureConverter <温度> <单位>
示例
# 标准格式(有空格)
java TemperatureConverter 36.6 C
# 输出:36.60 °C = 97.88 °F
# 粘连格式(无空格)
java TemperatureConverter 36.6c
# 输出:36.60 °C = 97.88 °F
# 华氏到摄氏
java TemperatureConverter 98.6 F
# 输出:98.60 °F = 37.00 °C
特点
- 快速高效,适合脚本编程
- 自动处理粘连格式
- 三种模式中最简洁
2️⃣ 批量转换模式
为数据处理设计 - 处理多行温度数据
语法
java TemperatureConverter <文件路径>
文件格式
每行一条数据,格式:<温度值> <单位>
# 示例:temperatures.txt
# 常见体温
36.6 C
37.5 C
# 常见环境温度
25 C
30 C
# 华氏度
98.6 F
77 F
# 特殊温度
0 C
100 C
32 F
212 F
运行示例
java TemperatureConverter temperatures.txt
输出
从文件读取温度数据:temperatures.txt
========================================
第 4 行:36.60 °C = 97.88 °F
第 5 行:37.50 °C = 99.50 °F
第 8 行:25.00 °C = 77.00 °F
...
========================================
处理完成:共处理 21 行,成功转换 10 条。
特点
- 支持注释行(以
#开头) - 支持空行(自动跳过)
- 显示处理统计信息
- 适合批量数据导入/导出
3️⃣ 交互式模式(推荐)
用户友好的交互方式 - 实时输入,即时反馈
启动
java TemperatureConverter
功能说明
自动纠正粘连单位
当输入数值和单位直接相连时(如 100f),程序会自动识别并显示纠正提示:
> 100f
✓ 已自动纠正输入:'100f' → '100 F'
100.00 °F = 37.78 °C
支持的粘连格式:
100f,100F→ 自动转换为100 F36.6c,36.6C→ 自动转换为36.6 C
智能缺少单位提示
缺少温度单位时,程序会拒绝转换并给出具体建议:
> 100
⚠️ 缺少温度单位!
请指定 C(摄氏度)或 F(华氏度)
示例:100 C 或 100 F
无效单位诊断
不支持的单位会被立即识别并告知:
> 100 K
❌ 不支持的温度单位:'K'
支持的单位:C(摄氏度)或 F(华氏度)
示例:100 C 或 100 F
无效数值诊断
数值格式不正确时会给出清晰提示:
> abc C
❌ 温度值不是有效的数字:'abc'
请输入数值(如 36.6, 100 等)
示例:36.6 C
标准格式直接转换
格式正确时直接显示结果:
> 36.6 C
36.60 °C = 97.88 °F
> 98.6 F
98.60 °F = 37.00 °C
退出程序
> quit
程序退出。
或者
> exit
程序退出。
交互模式智能纠正
纠正功能详解
| 错误类型 | 输入示例 | 程序行为 | 输出 |
|---|---|---|---|
| 粘连单位 | 100f |
自动纠正并转换 | ✓ 已自动纠正输入:'100f' → '100 F'100.00 °F = 37.78 °C |
| 有空格粘连 | 100 f |
直接识别并转换 | 100.00 °F = 37.78 °C |
| 缺少单位 | 100 |
拒绝并提示 | ⚠️ 缺少温度单位! 示例:100 C 或 100 F |
| 无效单位 | 100 K |
拒绝并说明原因 | ❌ 不支持的温度单位:'K' 示例:100 C 或 100 F |
| 无效数值 | abc C |
拒绝并给出示例 | ❌ 温度值不是有效的数字:'abc' 示例:36.6 C |
| 标准正确 | 36.6 C |
直接转换 | 36.60 °C = 97.88 °F |
完整交互示例
========================================
温度转换器 - 交互式模式
========================================
请输入要转换的温度与单位(例如 36.6 C 或 97 F)
输入 'quit' 或 'exit' 退出程序
========================================
> 36.6 C
36.60 °C = 97.88 °F
> 100f
✓ 已自动纠正输入:'100f' → '100 F'
100.00 °F = 37.78 °C
> 100 f
100.00 °F = 37.78 °C
> 100
⚠️ 缺少温度单位!
请指定 C(摄氏度)或 F(华氏度)
示例:100 C 或 100 F
> 100 K
❌ 不支持的温度单位:'K'
支持的单位:C(摄氏度)或 F(华氏度)
示例:100 C 或 100 F
> abc C
❌ 温度值不是有效的数字:'abc'
请输入数值(如 36.6, 100 等)
示例:36.6 C
> quit
程序退出。
编译与运行
前置要求
- Java JDK 8 或更高版本
- 命令行/终端访问权限
编译
# 进入项目目录
cd d:\VisualStudioProgram\VSCodePrograms\JavaLearningProject
# 编译源代码
javac TemperatureConverter.java
编译成功后会生成 TemperatureConverter.class 文件。
运行
模式选择
# 1. 交互式模式(推荐)
java TemperatureConverter
# 2. 命令行参数模式
java TemperatureConverter 36.6 C
# 3. 批量转换模式
java TemperatureConverter temperatures.txt
# 4. 显示帮助信息
java TemperatureConverter -h
java TemperatureConverter --help
示例
各种场景的使用
场景1:快速查询单个温度
$ java TemperatureConverter 37 C
37.00 °C = 98.60 °F
场景2:处理粘连格式
$ java TemperatureConverter 37c
37.00 °C = 98.60 °F
场景3:医学应用 - 正常体温
$ java TemperatureConverter 36.5 C
36.50 °C = 97.70 °F
$ java TemperatureConverter 98.6 F
98.60 °F = 37.00 °C
场景4:物理学应用 - 相变点
$ java TemperatureConverter 0 C
0.00 °C = 32.00 °F
$ java TemperatureConverter 100 C
100.00 °C = 212.00 °F
场景5:批量处理数据
创建 test.txt:
# 测试数据
25 C
30 C
35 C
96.8 F
104 F
运行:
$ java TemperatureConverter test.txt
从文件读取温度数据:test.txt
========================================
第 2 行:25.00 °C = 77.00 °F
第 3 行:30.00 °C = 86.00 °F
第 4 行:35.00 °C = 95.00 °F
第 5 行:96.80 °F = 36.00 °C
第 6 行:104.00 °F = 40.00 °C
========================================
处理完成:共处理 6 行,成功转换 5 条。
技术细节
程序结构
TemperatureConverter.java
├── 转换方法
│ ├── celsiusToFahrenheit() - C → F
│ └── fahrenheitToCelsius() - F → C
│
├── 智能诊断方法
│ ├── extractAdjacent() - 提取粘连格式
│ ├── analyzeAndSuggestFix() - 错误分析与建议
│ └── convertWithValidatedInput() - 执行转换
│
├── 交互方法
│ ├── interactiveMode() - 交互式模式
│ └── convertSingleTemperature() - 单个转换(命令行/文件)
│
├── 数据处理方法
│ ├── convertFromFile() - 批量文件处理
│ └── showUsage() - 使用说明
│
└── 入口点
└── main() - 程序入口,模式选择
粘连单位识别
正则表达式:^(\d+(?:\.\d+)?)\s*([CcFf])$
\d+- 一个或多个数字(?:\.\d+)?- 可选的小数部分\s*- 零个或多个空白字符[CcFf]- 单位字母(C/c/F/f)
支持的格式:
100f→ ["100", "F"]36.6c→ ["36.6", "C"]100 f→ ["100", "F"](允许空格)36.6 c→ ["36.6", "C"](允许空格)
三种模式的差异
| 特性 | 交互模式 | 命令行模式 | 文件模式 |
|---|---|---|---|
| 启用粘连识别 | ✅ 是 | ✅ 是 | ✅ 是 |
| 显示纠正提示 | ✅ 是 | ❌ 否 | ❌ 否 |
| 缺少单位处理 | ❌ 拒绝 | ✅ 默认C | ✅ 默认C |
| 错误详细提示 | ✅ 是 | ❌ 否 | ❌ 否 |
| 单/多行处理 | 多行循环 | 单行 | 多行批处理 |
常见问题
Q: 如何让程序接受更多的温度单位(如K、R)?
A: 修改 analyzeAndSuggestFix() 方法中的单位验证逻辑,添加新的单位判断条件和转换公式。
Q: 如何修改输出精度(目前是两位小数)?
A: 更改 System.out.printf() 中的格式字符串,例如 %.2f 改为 %.3f 表示三位小数。
Q: 批量模式中,某一行出错会影响整个文件处理吗?
A: 不会。程序会跳过无效行,继续处理后续行,最后显示成功和失败的统计。
Q: 能否在命令行模式中显示纠正提示?
A: 可以。修改 convertSingleTemperature() 方法中对 extractAdjacent() 的调用,改为调用 analyzeAndSuggestFix() 并传入 true 参数。
文件列表
| 文件 | 说明 |
|---|---|
TemperatureConverter.java |
源代码文件 |
TemperatureConverter.class |
编译后的字节码 |
temperatures.txt |
示例数据文件 |
README_增强版.md |
原始功能说明(已合并到本文档) |
交互模式改进说明.md |
交互模式详细说明(已合并到本文档) |
粘连单位修复总结.md |
修复说明(已合并到本文档) |
版本信息
- 程序版本:2.0
- 功能扩展:3项加分项 + 交互模式智能纠正
- 最后更新:2026年03月
- Java版本要求:JDK 8+
总结
这个温度转换器程序演示了以下编程概念:
- 正则表达式 - 灵活的模式匹配和数据提取
- 异常处理 - 文件IO和数据验证
- 模式设计 - 多种工作模式的统一管理
- 用户交互 - 友好的错误提示和智能建议
- 代码组织 - 清晰的方法划分和职责分离
祝你使用愉快! 🎉