From 4d0725b7f3ccb88ff5261a944d00dbdcc199fe59 Mon Sep 17 00:00:00 2001 From: Songrui <1778280163@qq.com> Date: Thu, 28 May 2026 21:46:23 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8B=E7=91=9E-202506050301?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- w1/AI协助.txt | 0 w1/README.md | 405 +++++++++++++++++++++++++++++++++++++++++++ w1/运行结果1.png | Bin 0 -> 15728 bytes w1/运行结果2.png | Bin 0 -> 14452 bytes 4 files changed, 405 insertions(+) delete mode 100644 w1/AI协助.txt create mode 100644 w1/运行结果1.png create mode 100644 w1/运行结果2.png diff --git a/w1/AI协助.txt b/w1/AI协助.txt deleted file mode 100644 index e69de29..0000000 diff --git a/w1/README.md b/w1/README.md index e69de29..2a8ab23 100644 --- a/w1/README.md +++ b/w1/README.md @@ -0,0 +1,405 @@ +# AI 交互记录 - Java 温度转换器开发 + +## 任务背景 +开发一个支持摄氏度(C)与华氏度(F)互转的 Java 程序,要求具备多种运行模式和完善的异常处理。 + +--- + +## 需求分析 + +### 核心功能 +1. **温度转换**:实现 C↔F 双向转换 +2. **多模式运行**:支持交互式、命令行参数、批量转换三种模式 +3. **输入解析**:智能识别温度值和单位 +4. **异常处理**:处理非法输入、格式错误等场景 + +### 技术要求 +- 使用模块化设计,每个功能独立方法 +- 完整的中文注释(Javadoc 风格) +- 遵循 Java 代码规范 +- 友好的用户提示 + +--- + +## 开发过程 + +### 第1轮:基础转换方法实现 +**用户需求:** +实现摄氏度与华氏度的互相转换 + +**AI 实现:** +```java +public static float celsiusToFahrenheit(float c) { + return c * 9.0f / 5.0f + 32.0f; +} + +public static float fahrenheitToCelsius(float f) { + return (f - 32.0f) * 5.0f / 9.0f; +} +``` + + +**技术要点:** +- 使用 `float` 类型保证精度 +- 浮点数运算使用 `9.0f` 避免整数除法 +- 静态方法便于直接调用 + +--- + +### 第2轮:输入解析功能 +**用户需求:** +解析用户输入字符串,提取温度值和单位 + +**AI 实现:** +```java +public static float[] parseInput(String input) { + // 1. 空值检查 + if (input == null || input.trim().isEmpty()) { + throw new IllegalArgumentException("输入为空"); + } + + // 2. 分割字符串 + String[] parts = input.trim().split("\\s+"); + + // 3. 解析数值 + float value = Float.parseFloat(parts[0]); + + // 4. 解析单位(默认 C) + String unit = parts.length > 1 ? parts[1].toUpperCase() : "C"; + + // 5. 验证单位合法性 + if (!unit.startsWith("C") && !unit.startsWith("F")) { + throw new IllegalArgumentException("未知单位 '" + unit + "'"); + } + + return new float[]{value, unit.equals("F") ? 1.0f : 0.0f}; +} +``` + + +**设计决策:** +- 返回 `float[]` 数组:`[0]` 存储数值,`[1]` 用 0/1 标识单位 +- 使用正则 `\\s+` 分割,兼容多个空格 +- 默认单位为摄氏度,提升用户体验 + +--- + +### 第3轮:格式化输出 +**用户需求:** +将转换结果格式化为易读的字符串 + +**AI 实现:** +```java +public static String convertAndFormat(float value, boolean isFahrenheit) { + if (isFahrenheit) { + float celsius = fahrenheitToCelsius(value); + return String.format("%.2f °F = %.2f °C", value, celsius); + } else { + float fahrenheit = celsiusToFahrenheit(value); + return String.format("%.2f °C = %.2f °F", value, fahrenheit); + } +} +``` + + +**技术亮点:** +- 使用 `String.format()` 统一格式化 +- 保留两位小数 `%.2f` +- 包含单位符号 `°C` / `°F` + +--- + +### 第4轮:交互式模式 +**用户需求:** +从标准输入读取用户输入并转换 + +**AI 实现:** +```java +public static void interactiveMode() { + Scanner scanner = new Scanner(System.in); + System.out.print("请输入要转换的温度与单位(例如 36.6 C 或 97 F):"); + String input = scanner.nextLine().trim(); + + if (input.isEmpty()) { + System.out.println("输入为空,程序退出。"); + scanner.close(); + return; + } + + try { + float[] parsed = parseInput(input); + float value = parsed[0]; + boolean isFahrenheit = (parsed[1] == 1.0f); + String result = convertAndFormat(value, isFahrenheit); + System.out.println(result); + } catch (IllegalArgumentException e) { + System.out.println("输入解析失败:" + e.getMessage()); + } finally { + scanner.close(); + } +} +``` + + +**异常处理策略:** +- `try-catch-finally` 确保资源释放 +- 捕获 `IllegalArgumentException` 提供友好提示 +- 空输入提前返回,避免无效计算 + +--- + +### 第5轮:命令行参数模式 +**用户需求:** +支持通过命令行参数直接传入温度值 + +**AI 实现:** +```java +public static void commandLineMode(String[] args) { + if (args.length < 1) { + System.out.println("用法:java TemperatureConverter <温度值> [单位]"); + System.out.println("示例:java TemperatureConverter 36.6 C"); + return; + } + + try { + float value = Float.parseFloat(args[0]); + String unit = (args.length > 1) ? args[1].toUpperCase() : "C"; + + if (!unit.startsWith("C") && !unit.startsWith("F")) { + throw new IllegalArgumentException("未知单位 '" + unit + "'"); + } + + boolean isFahrenheit = unit.startsWith("F"); + String result = convertAndFormat(value, isFahrenheit); + System.out.println(result); + } catch (NumberFormatException e) { + System.out.println("错误:温度值必须是数字,收到:" + args[0]); + } catch (IllegalArgumentException e) { + System.out.println("错误:" + e.getMessage()); + } +} +``` + + +**使用示例:** +```bash +java TemperatureConverter 36.6 C +java TemperatureConverter 97 F +``` + + +--- + +### 第6轮:批量转换模式 +**用户需求:** +从多行输入中批量转换温度数据 + +**AI 实现:** +```java +public static void batchConvertMode(String[] lines) { + System.out.println("=== 批量转换开始 ==="); + int successCount = 0; + int failCount = 0; + + for (int i = 0; i < lines.length; i++) { + String line = lines[i].trim(); + if (line.isEmpty()) continue; + + System.out.printf("第 %d 行:", i + 1); + try { + float[] parsed = parseInput(line); + float value = parsed[0]; + boolean isFahrenheit = (parsed[1] == 1.0f); + String result = convertAndFormat(value, isFahrenheit); + System.out.println(result); + successCount++; + } catch (IllegalArgumentException e) { + System.out.println("失败 - " + e.getMessage()); + failCount++; + } + } + + System.out.println("=== 批量转换结束 ==="); + System.out.printf("成功:%d 条,失败:%d 条%n", successCount, failCount); +} +``` + + +**设计特点:** +- 统计成功/失败数量 +- 逐行显示转换结果 +- 单行失败不影响其他行处理 + +--- + +### 第7轮:主入口整合 +**用户需求:** +整合三种运行模式到 `main()` 方法 + +**AI 实现:** +```java +public static void main(String[] args) { + // 批量转换模式 + if (args.length > 0 && "--batch".equals(args[0])) { + Scanner scanner = new Scanner(System.in); + java.util.List lines = new java.util.ArrayList<>(); + + while (true) { + String line = scanner.nextLine().trim(); + if (line.isEmpty()) break; + lines.add(line); + } + + scanner.close(); + batchConvertMode(lines.toArray(new String[0])); + return; + } + + // 根据参数选择模式 + if (args.length > 0) { + commandLineMode(args); + } else { + interactiveMode(); + } +} +``` + + +**模式切换逻辑:** +- 无参数 → 交互式模式 +- 有参数(非 `--batch`)→ 命令行参数模式 +- `--batch` 参数 → 批量转换模式 + +--- + +## 最终代码结构 + +| 方法名 | 功能 | 行数 | +|--------|------|------| +| `celsiusToFahrenheit()` | 摄氏转华氏 | 3 | +| `fahrenheitToCelsius()` | 华氏转摄氏 | 3 | +| `parseInput()` | 解析输入字符串 | 30 | +| `convertAndFormat()` | 格式化输出结果 | 10 | +| `interactiveMode()` | 交互式模式 | 26 | +| `commandLineMode()` | 命令行参数模式 | 26 | +| `batchConvertMode()` | 批量转换模式 | 34 | +| `main()` | 程序入口 | 28 | + +**总计:** 238 行(含注释和空行) + +--- + +## 核心技术要点 + +### 1. 模块化设计 +- 每个功能独立为静态方法 +- 方法职责单一,易于测试和维护 +- 复用 `parseInput()` 和 `convertAndFormat()` 避免重复代码 + +### 2. 异常处理机制 +- **输入验证**:空值检查、格式验证 +- **数值解析**:捕获 `NumberFormatException` +- **业务逻辑**:抛出 `IllegalArgumentException` +- **资源管理**:`finally` 块确保 Scanner 关闭 + +### 3. 用户友好性 +- 详细的错误提示信息 +- 支持默认单位(C) +- 批量模式提供统计信息 +- 使用示例清晰明了 + +### 4. 代码规范 +- Javadoc 风格注释(类、方法、参数) +- 驼峰命名法 +- 合理的缩进和空行 +- 魔法数字提取为常量(可选优化) + +--- + +## 测试用例 + +### 测试1:交互式模式 +``` +输入:36.6 C +输出:36.60 °C = 97.88 °F +``` + + +### 测试2:命令行参数模式 +```bash +$ java TemperatureConverter 97 F +输出:97.00 °F = 36.11 °C +``` + + +### 测试3:批量转换模式 +``` +输入: +36.6 C +97 F +abc X +100 C + +输出: +=== 批量转换开始 === +第 1 行:36.60 °C = 97.88 °F +第 2 行:97.00 °F = 36.11 °C +第 3 行:失败 - 温度值必须是数字:abc +第 4 行:100.00 °C = 212.00 °F +=== 批量转换结束 === +成功:3 条,失败:1 条 +``` + + +### 测试4:异常处理 +``` +输入:abc C +输出:输入解析失败:温度值必须是数字:abc +请按示例输入数值与单位,例如:36.6 C +``` + + +--- + +## 遇到的问题与解决方案 + +| 问题 | 解决方案 | +|------|----------| +| 浮点数精度丢失 | 使用 `float` 类型和 `9.0f` 后缀 | +| 输入格式多样 | 使用正则 `\\s+` 灵活分割 | +| 单位大小写不一 | 统一转为大写 `toUpperCase()` | +| 资源泄漏风险 | `finally` 块确保关闭 Scanner | +| 批量模式中断 | 单行异常不影响其他行处理 | + +--- + +## 可扩展方向 + +1. **文件读写**:从文件读取批量数据 +2. **更多温标**:支持开尔文(K)、兰氏度(R) +3. **图形界面**:使用 Swing/JavaFX +4. **国际化**:多语言支持 +5. **历史记录**:保存转换历史 + +--- + +## 总结 + +### 代码特性 +- ✓ 三种运行模式(交互式、命令行、批量) +- ✓ 完整的异常处理和输入验证 +- ✓ 模块化设计,高内聚低耦合 +- ✓ 详细的中文注释 +- ✓ 用户友好的提示信息 + +### 技术栈 +- Java SE(Scanner、String.format、ArrayList) +- 异常处理(try-catch-finally) +- 正则表达式(`\\s+` 分割) +- 集合框架(List、Array) + +--- + +**完成时间:** 2026年5月28日 +**项目路径:** `D:\Project\java\w1\TemperatureConverter.java` +**代码行数:** 238 行 \ No newline at end of file diff --git a/w1/运行结果1.png b/w1/运行结果1.png new file mode 100644 index 0000000000000000000000000000000000000000..5952f054b1492f3654ecbd832c289281f8cc3468 GIT binary patch literal 15728 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 literal 0 HcmV?d00001 diff --git a/w1/运行结果2.png b/w1/运行结果2.png new file mode 100644 index 0000000000000000000000000000000000000000..8a1aa9da567bb88adfea74496498f0f902587548 GIT binary patch literal 14452 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