# 温度转换器 - 完整使用指南
## 📋 目录
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. **代码组织** - 清晰的方法划分和职责分离
祝你使用愉快! 🎉