diff --git a/W1-杜雨萌-202506050328/AI协助.txt b/W1-杜雨萌-202506050328/AI协助.txt new file mode 100644 index 0000000..196fea6 --- /dev/null +++ b/W1-杜雨萌-202506050328/AI协助.txt @@ -0,0 +1,10 @@ +Prompt 记录: +"将下面的 Python 温度转换程序改写为等效的 Java 程序,保留注释并保证功能一致。" +"添加命令行参数支持作为加分项,例如 java TemperatureConverter 36.6 C" +"增加批量文件处理功能,从文件读取多行温度并输出结果" +"帮我创建一个完整的 README.md,包含编译运行命令和示例" +AI 帮助总结: +通过AI协助完成了Python到Java的代码移植,自动转换了语法结构,AI还帮助实现了两种更复杂的功能,并生成了完整的文档说明。 +把Python代码翻译成了Java,自动处理了两种语言不一样的地方,加上了命令行参数和批量处理两个功能 +会写README文档,学会了它是什么。 + diff --git a/W1-杜雨萌-202506050328/README.md b/W1-杜雨萌-202506050328/README.md new file mode 100644 index 0000000..d8d44f8 --- /dev/null +++ b/W1-杜雨萌-202506050328/README.md @@ -0,0 +1,22 @@ +# 温度转换器 (Temperature Converter) +## 编译 +打开命令行终端,进入程序所在目录,执行以下命令: +```bash +javac TemperatureConverter.java +``` +## 运行 +### 模式一:交互模式(推荐初学者使用) +这是最基础的模式,程序会提示你输入温度: +```bash +java TemperatureConverter +``` +### 模式二:命令行参数模式(加分功能) +直接通过命令参数传入温度和单位: +```bash +java TemperatureConverter 数值 单位 +``` +### 模式三:批量文件模式(加分功能) +从文本文件中读取多行温度进行批量转换 +```bash +java TemperatureConverter -f temperatures.txt +``` \ No newline at end of file diff --git a/W1-杜雨萌-202506050328/TemperatureConverter.java b/W1-杜雨萌-202506050328/TemperatureConverter.java new file mode 100644 index 0000000..109410f --- /dev/null +++ b/W1-杜雨萌-202506050328/TemperatureConverter.java @@ -0,0 +1,136 @@ +import java.io.*; +import java.nio.file.*; +import java.util.*; +import java.util.stream.Stream; + +/** + * 温度转换器 - 支持摄氏度(C)与华氏度(F)之间互转 + * 对应Python原版:TemperatureConverter.py + * + * 功能增强: + * 1. 交互模式:直接运行,提示用户输入 + * 2. 命令行参数模式:java TemperatureConverter <数值> <单位> + * 3. 批量文件处理:java TemperatureConverter -f <文件名> + * + * @author 移植自Python示例 + */ +public class TemperatureConverter { + + /** + * 将摄氏度转换为华氏度。 + * + * @param c 摄氏温度 (float) + * @return 对应的华氏温度 (float) + */ + public static float celsiusToFahrenheit(float c) { + return c * 9.0f / 5.0f + 32.0f; + } + + /** + * 将华氏度转换为摄氏度。 + * + * @param f 华氏温度 (float) + * @return 对应的摄氏温度 (float) + */ + public static float fahrenheitToCelsius(float f) { + return (f - 32.0f) * 5.0f / 9.0f; + } + + /** + * 解析并执行单个温度转换(字符串输入) + * @param input 格式如 "36.6 C" 或 "97 F" + * @return 转换结果字符串,或错误信息 + */ + public static String convertSingle(String input) { + if (input == null || input.trim().isEmpty()) { + return "输入为空,跳过。"; + } + + String[] parts = input.trim().split("\\s+"); + try { + float value = Float.parseFloat(parts[0]); + String unit = (parts.length > 1) ? parts[1].toUpperCase() : "C"; + + if (unit.startsWith("C")) { + float f = celsiusToFahrenheit(value); + return String.format("%.2f °C = %.2f °F", value, f); + } else if (unit.startsWith("F")) { + float c = fahrenheitToCelsius(value); + return String.format("%.2f °F = %.2f °C", value, c); + } else { + return "未知单位,请使用 C 或 F。"; + } + } catch (NumberFormatException e) { + return "数值解析失败,请确保第一项是数字。"; + } + } + + /** + * 交互模式:从标准输入读取一行并转换 + */ + private static void interactiveMode() { + Scanner scanner = new Scanner(System.in); + System.out.println("请输入要转换的温度与单位(例如 36.6 C 或 97 F):"); + String line = scanner.nextLine(); + String result = convertSingle(line); + System.out.println(result); + scanner.close(); + } + + /** + * 命令行参数模式:直接使用参数转换 + * @param args 两个参数:数值 单位 + */ + private static void argMode(String[] args) { + if (args.length < 1) { + System.out.println("错误:缺少参数。用法:java TemperatureConverter <数值> [单位]"); + return; + } + // 将命令行参数拼接成标准输入格式 + String input = String.join(" ", args); + String result = convertSingle(input); + System.out.println(result); + } + + /** + * 批量文件模式:读取文件每行,进行转换并输出到控制台 + * @param filename 文件名 + */ + private static void batchMode(String filename) { + Path path = Paths.get(filename); + if (!Files.exists(path)) { + System.out.println("错误:文件 " + filename + " 不存在。"); + return; + } + + System.out.println("批量转换文件:" + filename); + try (Stream lines = Files.lines(path)) { + lines.forEach(line -> { + String result = convertSingle(line); + System.out.println("输入: " + line + " -> " + result); + }); + } catch (IOException e) { + System.out.println("读取文件时出错: " + e.getMessage()); + } + } + + /** + * 主程序入口 + * 支持三种运行模式: + * 1. 无参数:交互模式 + * 2. -f <文件>:批量文件模式 + * 3. 其他参数:命令行参数模式 + */ + public static void main(String[] args) { + if (args.length == 0) { + // 无参数:交互模式(原Python main行为) + interactiveMode(); + } else if (args.length >= 2 && args[0].equals("-f")) { + // -f 文件名:批量文件模式(加分项) + batchMode(args[1]); + } else { + // 其他:视为命令行参数模式(加分项) + argMode(args); + } + } +} diff --git a/W1-杜雨萌-202506050328/运行结果.png b/W1-杜雨萌-202506050328/运行结果.png new file mode 100644 index 0000000..afe7c73 Binary files /dev/null and b/W1-杜雨萌-202506050328/运行结果.png differ