You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Liangkaixiong 5170558854 上传文件至 'w1' 1 month ago
W1-梁凯雄-202402050120 上传文件至 'W1-梁凯雄-202402050120' 1 month ago
w1 上传文件至 'w1' 1 month ago
AI协助记录.txt w1 1 month ago
README.md w1 1 month ago
TemperatureConverter.java w1 1 month ago
程序运行输出文本.txt w1 1 month ago

README.md

温度转换器 - 完整使用指南

📋 目录

  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️⃣ 命令行参数模式

最快速的使用方式 - 单行转换,无需等待

语法

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 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 或更高版本
  • 命令行/终端访问权限

编译

# 进入项目目录
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+

总结

这个温度转换器程序演示了以下编程概念:

  1. 正则表达式 - 灵活的模式匹配和数据提取
  2. 异常处理 - 文件IO和数据验证
  3. 模式设计 - 多种工作模式的统一管理
  4. 用户交互 - 友好的错误提示和智能建议
  5. 代码组织 - 清晰的方法划分和职责分离

祝你使用愉快! 🎉