# 温度转换器 - 完整使用指南 ## 📋 目录 1. [概述](#概述) 2. [特性](#特性) 3. [使用方法](#使用方法) 4. [交互模式智能纠正](#交互模式智能纠正) 5. [编译与运行](#编译与运行) 6. [示例](#示例) 7. [技术细节](#技术细节) --- ## 概述 温度转换器是一个功能完整的Java程序,支持摄氏度(Celsius)和华氏度(Fahrenheit)之间的互相转换。 **支持三种工作模式**: 1. **命令行参数模式** - 直接在命令行传入温度和单位 2. **批量转换模式** - 从文件读取温度数据进行批量处理 3. **交互式模式** - 实时输入温度数据,获得智能纠正提示 --- ## 特性 ### ✨ 核心功能 - ✅ 摄氏度 ↔ 华氏度 双向转换 - ✅ 精确到小数点后两位 - ✅ 三种灵活的使用模式 - ✅ 智能的错误诊断和纠正建议 ### 🎯 转换公式 | 方向 | 公式 | |-----|------| | 摄氏 → 华氏 | F = C × 9/5 + 32 | | 华氏 → 摄氏 | C = (F - 32) × 5/9 | ### 🚀 加分项(已实现) 1. **✅ 命令行参数模式** - 支持 `java TemperatureConverter 36.6 C` - 自动识别粘连格式(如 `36.6c`) 2. **✅ 批量转换模式** - 从文件读取多行温度数据 - 支持注释行和空行 - 提供转换统计 3. **✅ 交互模式智能纠正** - 自动识别和修复粘连单位 - 缺少单位时给出具体提示 - 无效输入时指出问题所在 --- ## 使用方法 ### 1️⃣ 命令行参数模式 **最快速的使用方式** - 单行转换,无需等待 #### 语法 ```bash java TemperatureConverter <温度> <单位> ``` #### 示例 ```bash # 标准格式(有空格) 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️⃣ 批量转换模式 **为数据处理设计** - 处理多行温度数据 #### 语法 ```bash 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 ``` #### 运行示例 ```bash 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️⃣ 交互式模式(推荐) **用户友好的交互方式** - 实时输入,即时反馈 #### 启动 ```bash java TemperatureConverter ``` #### 功能说明 **自动纠正粘连单位** 当输入数值和单位直接相连时(如 `100f`),程序会自动识别并显示纠正提示: ``` > 100f ✓ 已自动纠正输入:'100f' → '100 F' 100.00 °F = 37.78 °C ``` 支持的粘连格式: - `100f`, `100F` → 自动转换为 `100 F` - `36.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 或更高版本 - 命令行/终端访问权限 ### 编译 ```bash # 进入项目目录 cd d:\VisualStudioProgram\VSCodePrograms\JavaLearningProject # 编译源代码 javac TemperatureConverter.java ``` 编译成功后会生成 `TemperatureConverter.class` 文件。 ### 运行 #### 模式选择 ```bash # 1. 交互式模式(推荐) java TemperatureConverter # 2. 命令行参数模式 java TemperatureConverter 36.6 C # 3. 批量转换模式 java TemperatureConverter temperatures.txt # 4. 显示帮助信息 java TemperatureConverter -h java TemperatureConverter --help ``` --- ## 示例 ### 各种场景的使用 #### 场景1:快速查询单个温度 ```bash $ java TemperatureConverter 37 C 37.00 °C = 98.60 °F ``` #### 场景2:处理粘连格式 ```bash $ java TemperatureConverter 37c 37.00 °C = 98.60 °F ``` #### 场景3:医学应用 - 正常体温 ```bash $ java TemperatureConverter 36.5 C 36.50 °C = 97.70 °F $ java TemperatureConverter 98.6 F 98.60 °F = 37.00 °C ``` #### 场景4:物理学应用 - 相变点 ```bash $ 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 ``` 运行: ```bash $ 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+ --- ## 总结 这个温度转换器程序演示了以下编程概念: 1. **正则表达式** - 灵活的模式匹配和数据提取 2. **异常处理** - 文件IO和数据验证 3. **模式设计** - 多种工作模式的统一管理 4. **用户交互** - 友好的错误提示和智能建议 5. **代码组织** - 清晰的方法划分和职责分离 祝你使用愉快! 🎉