diff --git a/AI协助记录.txt b/AI协助记录.txt new file mode 100644 index 0000000..fd415f6 --- /dev/null +++ b/AI协助记录.txt @@ -0,0 +1,12 @@ +核心 prompt : +1. 修复温度转换 Java 代码的空格分割问题; +2. 实现批量读取文件转换温度的功能; +3. 编写规范的 README.md 运行说明; +4. 指导命令行编译运行的正确步骤。 + +AI 的帮助: +1.修正了代码中 split ("") 的分割逻辑为 split ("\s+"),解决单位识别失败问题; +2.提供了完整的批量转换方法代码,实现从 temps.txt 批量处理温度; +3.整理了包含编译 / 运行命令、示例的 README.md 模板; +4.解决了编译报错、文件路径等问题; +5. 检查代码结构与语法错误,指出方法位置错误、括号不匹配等问题,让程序能正常编译运行。 diff --git a/README.md b/README.md index a8687f1..5ff7ed2 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,54 @@ -# java - +# 温度转换器(Java版) +## 功能说明 +实现摄氏度(C)和华氏度(F)互转,支持三种使用方式: +1. 交互式输入(控制台提示输入) +2. 命令行参数输入(加分项) +3. 批量转换(从文件读取多行温度,加分项) + +## 编译命令 +在代码所在目录执行: +```bash +javac -encoding UTF-8 TemperatureConverter.java + +## 运行命令 +方式 1:交互式运行(含批量转换) +```bash +java TemperatureConverter + - 先按提示输入单条温度(例如:36.6 C); + -程序自动读取同目录下 temps.txt 文件,批量转换所有行的温度。 + +方式 2:命令行参数运行 +```bash +java TemperatureConverter 36.6 C +# 或 +```bash +java TemperatureConverter 97 F + +## 运行示例 +示例 1:交互式 + 批量转换 +输入: +36.6 C +输出: +36.60 °C = 97.88 °F + +===== 批量转换开始 ===== +处理:36.6 C → 36.60 °C = 97.88 °F +处理:97 F → 97.00 °F = 36.11 °C +处理:100 C → 100.00 °C = 212.00 °F +处理:212 F → 212.00 °F = 100.00 °C +处理:25 C → 25.00 °C = 77.00 °F +处理:77 F → 77.00 °F = 25.00 °C +===== 批量转换结束 ===== + +示例 2:命令行转换华氏度到摄氏度 +输入命令:java TemperatureConverter 97 F输出:97.00 °F = 36.11 °C +批量转换说明 +1. 需在代码同目录下创建 temps.txt 文件; +2. 文件每行格式为「数值 单位」(例如:36.6 C); +3. 运行交互式模式时,程序自动执行批量转换。 + +注:批量转换所需的 temps.txt 文件因平台上传数量限制未单独上传,文件内容为: +36.6 C +97 F +100 C +212 F \ No newline at end of file diff --git a/RunOutput.txt.txt b/RunOutput.txt.txt new file mode 100644 index 0000000..5fc9434 --- /dev/null +++ b/RunOutput.txt.txt @@ -0,0 +1,10 @@ +36.60 C = 97.88 F + +===== תʼ ===== +36.6 C 36.60 C = 97.88 F +97 F 97.00 F = 36.11 C +100 C 100.00 C = 212.00 F +212 F 212.00 F = 100.00 C +25 C 25.00 C = 77.00 F +77 F 77.00 F = 25.00 C +===== ת ===== diff --git a/RunScreenshot.png.png b/RunScreenshot.png.png new file mode 100644 index 0000000..4dc17da Binary files /dev/null and b/RunScreenshot.png.png differ diff --git a/TemperatureConverter.class b/TemperatureConverter.class new file mode 100644 index 0000000..a63b331 Binary files /dev/null and b/TemperatureConverter.class differ diff --git a/TemperatureConverter.java b/TemperatureConverter.java new file mode 100644 index 0000000..b644100 --- /dev/null +++ b/TemperatureConverter.java @@ -0,0 +1,121 @@ +import java.util.Scanner; +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; + +/** + * 温度转换器程序(Java版) + * 支持摄氏度(C)与华氏度(F)之间互转 + * 支持三种输入方式: + * 1. 交互式输入(控制台提示输入) + * 2. 命令行参数(例如:java TemperatureConverter 36.6 C) + * 3. 批量转换(从temps.txt文件读取多行温度) + */ +public class TemperatureConverter { + + /** + * 将摄氏度转换为华氏度 + * @param c 摄氏温度(浮点数) + * @return 对应的华氏温度(浮点数) + */ + public static double celsiusToFahrenheit(double c) { + return c * 9.0 / 5.0 + 32.0; + } + + /** + * 将华氏度转换为摄氏度 + * @param f 华氏温度(浮点数) + * @return 对应的摄氏温度(浮点数) + */ + public static double fahrenheitToCelsius(double f) { + return (f - 32.0) * 5.0 / 9.0; + } + + /** + * 处理温度转换的核心逻辑 + * @param value 温度数值 + * @param unit 温度单位(C/F,不区分大小写) + */ + public static void convert(double value, String unit) { + String upperUnit = unit.toUpperCase(); + if (upperUnit.equals("C")) { + double f = celsiusToFahrenheit(value); + System.out.printf("%.2f °C = %.2f °F%n", value, f); + } else if (upperUnit.equals("F")) { + double c = fahrenheitToCelsius(value); + System.out.printf("%.2f °F = %.2f °C%n", value, c); + } else { + System.out.println("未知单位,请使用 C 或 F。"); + } + } + + /** + * 交互式输入模式(和Python原版一致) + */ + public static void interactiveMode() { + Scanner scanner = new Scanner(System.in); + System.out.print("请输入要转换的温度与单位(例如 36.6 C 或 97 F):"); + String s = scanner.nextLine().trim(); + scanner.close(); + + if (s.isEmpty()) { + System.out.println("输入为空,程序退出。"); + return; + } + + try { + String[] parts = s.split("\\s+"); + double value = Double.parseDouble(parts[0]); + // 若用户只输数值,默认按摄氏度处理 + String unit = parts.length > 1 ? parts[1] : "C"; + convert(value, unit); + } catch (Exception e) { + System.out.println("输入解析失败,请按示例输入数值与单位,例如:36.6 C"); + } + } + + /** + * 批量转换:从文件读取多行温度并输出结果(加分项) + * @param filePath 文件路径(每行格式:数值 单位,例如 36.6 C) + */ + public static void batchConvert(String filePath) { + try (BufferedReader br = new BufferedReader(new FileReader(filePath))) { + String line; + System.out.println("\n===== 批量转换开始 ====="); + while ((line = br.readLine()) != null) { + String trimLine = line.trim(); + // 跳过空行 + if (trimLine.isEmpty()) continue; + try { + String[] parts = trimLine.split("\\s+"); + double value = Double.parseDouble(parts[0]); + String unit = parts.length > 1 ? parts[1] : "C"; + System.out.print("处理:" + line + " → "); + convert(value, unit); + } catch (Exception e) { + System.out.println("行「" + line + "」格式错误,跳过"); + } + } + System.out.println("===== 批量转换结束 =====\n"); + } catch (IOException e) { + System.out.println("\n读取文件失败:找不到 " + filePath + " 文件(请确认文件在同目录下)\n"); + } + } + + public static void main(String[] args) { + // 优先处理命令行参数模式(加分项) + if (args.length >= 2) { + try { + double value = Double.parseDouble(args[0]); + String unit = args[1]; + convert(value, unit); + } catch (Exception e) { + System.out.println("命令行参数解析失败!示例用法:java TemperatureConverter 36.6 C"); + } + } else { + // 无命令行参数则进入交互式模式 + 批量转换 + interactiveMode(); + batchConvert("temps.txt"); + } + } +} \ No newline at end of file diff --git a/temps.txt b/temps.txt new file mode 100644 index 0000000..a49118d --- /dev/null +++ b/temps.txt @@ -0,0 +1,6 @@ +36.6 C +97 F +100 C +212 F +25 C +77 F \ No newline at end of file diff --git a/运行截图.png b/运行截图.png new file mode 100644 index 0000000..4dc17da Binary files /dev/null and b/运行截图.png differ