diff --git a/TemperatureConverter/AI 协助记录.txt b/TemperatureConverter/AI 协助记录.txt new file mode 100644 index 0000000..2a761ea --- /dev/null +++ b/TemperatureConverter/AI 协助记录.txt @@ -0,0 +1,8 @@ +本次作业中,我使用 AI 辅助完成了从 Python 到 Java 的程序迁移。 +我使用的主要提示词包括: + +1. “将Python温度转换程序改写为等效的Java程序,保留注释并保证功能一致” +​ +2. “Java程序需要支持命令行参数模式,例如  java TemperatureConverter 36.6C ” + + diff --git a/TemperatureConverter/README.md b/TemperatureConverter/README.md new file mode 100644 index 0000000..49ca781 --- /dev/null +++ b/TemperatureConverter/README.md @@ -0,0 +1,118 @@ +import java.util.Scanner; +import java.io.File; +import java.io.FileNotFoundException; + +/** + * 温度转换程序:实现摄氏温度与华氏温度的相互转换 + * 支持交互式输入、命令行参数和批量文件转换三种模式 + */ +public class TemperatureConverter { + + /** + * 将摄氏温度转换为华氏温度 + * @param celsius 摄氏温度值 + * @return 对应的华氏温度值 + */ + public static double celsiusToFahrenheit(double celsius) { + return celsius * 9.0 / 5.0 + 32.0; + } + + /** + * 将华氏温度转换为摄氏温度 + * @param fahrenheit 华氏温度值 + * @return 对应的摄氏温度值 + */ + public static double fahrenheitToCelsius(double fahrenheit) { + return (fahrenheit - 32.0) * 5.0 / 9.0; + } + + /** + * 解析并转换单个温度输入 + * @param input 带单位的温度字符串,如 "36.6C" 或 "98.6F" + */ + public static void convertAndPrint(String input) { + try { + char unit = input.charAt(input.length() - 1); + double value = Double.parseDouble(input.substring(0, input.length() - 1)); + + if (unit == 'C' || unit == 'c') { + double fahrenheit = celsiusToFahrenheit(value); + System.out.printf("%.2f°C = %.2f°F%n", value, fahrenheit); + } else if (unit == 'F' || unit == 'f') { + double celsius = fahrenheitToCelsius(value); + System.out.printf("%.2f°F = %.2f°C%n", value, celsius); + } else { + System.out.println("错误:温度单位必须是 C 或 F"); + } + } catch (NumberFormatException e) { + System.out.println("错误:无法解析温度数值,请输入如 36.6C 或 98.6F 的格式"); + } catch (StringIndexOutOfBoundsException e) { + System.out.println("错误:输入不能为空或格式不正确"); + } + } + + /** + * 从文件批量读取温度并转换 + * @param filename 输入文件名,每行一个温度值 + */ + public static void batchConvertFromFile(String filename) { + try { + File file = new File(filename); + Scanner scanner = new Scanner(file); + int lineNumber = 0; + while (scanner.hasNextLine()) { + lineNumber++; + String line = scanner.nextLine().trim(); + if (!line.isEmpty()) { + System.out.printf("第 %d 行: ", lineNumber); + convertAndPrint(line); + } + } + scanner.close(); + } catch (FileNotFoundException e) { + System.out.println("错误:未找到文件 " + filename); + } + } + + /** + * 交互式转换模式 + */ + public static void interactiveMode() { + Scanner scanner = new Scanner(System.in); + System.out.println("欢迎使用温度转换器"); + System.out.println("输入格式:数字+单位(如 36.6C 或 98.6F),输入 exit 退出"); + + while (true) { + System.out.print("请输入温度: "); + String input = scanner.nextLine().trim(); + if (input.equalsIgnoreCase("exit")) { + System.out.println("再见!"); + break; + } + convertAndPrint(input); + } + scanner.close(); + } + + /** + * 主程序入口 + * @param args 命令行参数: + * - 无参数:进入交互式模式 + * - 一个参数:直接转换该温度(如 36.6C) + * - 两个参数且第一个为 -f:从指定文件批量转换 + */ + public static void main(String[] args) { + if (args.length == 0) { + interactiveMode(); + } else if (args.length == 1) { + convertAndPrint(args[0]); + } else if (args.length == 2 && args[0].equals("-f")) { + batchConvertFromFile(args[1]); + } else { + System.out.println("用法:"); + System.out.println(" java TemperatureConverter - 进入交互式模式"); + System.out.println(" java TemperatureConverter 36.6C - 直接转换单个温度"); + System.out.println(" java TemperatureConverter -f temps.txt - 从文件批量转换"); + } + } +} diff --git a/TemperatureConverter/TemperatureConverter.class b/TemperatureConverter/TemperatureConverter.class new file mode 100644 index 0000000..0ab50b9 Binary files /dev/null and b/TemperatureConverter/TemperatureConverter.class differ diff --git a/TemperatureConverter/TemperatureConverter.java b/TemperatureConverter/TemperatureConverter.java new file mode 100644 index 0000000..49ca781 --- /dev/null +++ b/TemperatureConverter/TemperatureConverter.java @@ -0,0 +1,118 @@ +import java.util.Scanner; +import java.io.File; +import java.io.FileNotFoundException; + +/** + * 温度转换程序:实现摄氏温度与华氏温度的相互转换 + * 支持交互式输入、命令行参数和批量文件转换三种模式 + */ +public class TemperatureConverter { + + /** + * 将摄氏温度转换为华氏温度 + * @param celsius 摄氏温度值 + * @return 对应的华氏温度值 + */ + public static double celsiusToFahrenheit(double celsius) { + return celsius * 9.0 / 5.0 + 32.0; + } + + /** + * 将华氏温度转换为摄氏温度 + * @param fahrenheit 华氏温度值 + * @return 对应的摄氏温度值 + */ + public static double fahrenheitToCelsius(double fahrenheit) { + return (fahrenheit - 32.0) * 5.0 / 9.0; + } + + /** + * 解析并转换单个温度输入 + * @param input 带单位的温度字符串,如 "36.6C" 或 "98.6F" + */ + public static void convertAndPrint(String input) { + try { + char unit = input.charAt(input.length() - 1); + double value = Double.parseDouble(input.substring(0, input.length() - 1)); + + if (unit == 'C' || unit == 'c') { + double fahrenheit = celsiusToFahrenheit(value); + System.out.printf("%.2f°C = %.2f°F%n", value, fahrenheit); + } else if (unit == 'F' || unit == 'f') { + double celsius = fahrenheitToCelsius(value); + System.out.printf("%.2f°F = %.2f°C%n", value, celsius); + } else { + System.out.println("错误:温度单位必须是 C 或 F"); + } + } catch (NumberFormatException e) { + System.out.println("错误:无法解析温度数值,请输入如 36.6C 或 98.6F 的格式"); + } catch (StringIndexOutOfBoundsException e) { + System.out.println("错误:输入不能为空或格式不正确"); + } + } + + /** + * 从文件批量读取温度并转换 + * @param filename 输入文件名,每行一个温度值 + */ + public static void batchConvertFromFile(String filename) { + try { + File file = new File(filename); + Scanner scanner = new Scanner(file); + int lineNumber = 0; + while (scanner.hasNextLine()) { + lineNumber++; + String line = scanner.nextLine().trim(); + if (!line.isEmpty()) { + System.out.printf("第 %d 行: ", lineNumber); + convertAndPrint(line); + } + } + scanner.close(); + } catch (FileNotFoundException e) { + System.out.println("错误:未找到文件 " + filename); + } + } + + /** + * 交互式转换模式 + */ + public static void interactiveMode() { + Scanner scanner = new Scanner(System.in); + System.out.println("欢迎使用温度转换器"); + System.out.println("输入格式:数字+单位(如 36.6C 或 98.6F),输入 exit 退出"); + + while (true) { + System.out.print("请输入温度: "); + String input = scanner.nextLine().trim(); + if (input.equalsIgnoreCase("exit")) { + System.out.println("再见!"); + break; + } + convertAndPrint(input); + } + scanner.close(); + } + + /** + * 主程序入口 + * @param args 命令行参数: + * - 无参数:进入交互式模式 + * - 一个参数:直接转换该温度(如 36.6C) + * - 两个参数且第一个为 -f:从指定文件批量转换 + */ + public static void main(String[] args) { + if (args.length == 0) { + interactiveMode(); + } else if (args.length == 1) { + convertAndPrint(args[0]); + } else if (args.length == 2 && args[0].equals("-f")) { + batchConvertFromFile(args[1]); + } else { + System.out.println("用法:"); + System.out.println(" java TemperatureConverter - 进入交互式模式"); + System.out.println(" java TemperatureConverter 36.6C - 直接转换单个温度"); + System.out.println(" java TemperatureConverter -f temps.txt - 从文件批量转换"); + } + } +} diff --git a/TemperatureConverter/屏幕截图 2026-03-09 124351.png b/TemperatureConverter/屏幕截图 2026-03-09 124351.png new file mode 100644 index 0000000..f469a7f Binary files /dev/null and b/TemperatureConverter/屏幕截图 2026-03-09 124351.png differ