diff --git a/Java运行结果.png b/Java运行结果.png new file mode 100644 index 0000000..ddfab6f Binary files /dev/null and b/Java运行结果.png differ diff --git a/README.md b/README.md index a8687f1..55c0899 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,14 @@ -# java - +# TemperatureConverter + +将 Python 温度转换程序改写为等效 Java 程序,实现摄氏温度与华氏温度的双向转换。 + +## 功能说明 +支持交互式输入:程序启动后等待用户输入温度与单位(例如程序提问后我输入 `35.2 C`)。 +支持命令行参数:直接在运行命令后传入温度与单位(如 `java TemperatureConverter 86 F`,直接输出,无需程序提问)。 +支持批量转换:我先编写了temperatures文件,里面有很多温度,通过 `--batch` 参数读取文本文件进行批量转换。 + +## 编译命令 +在 Windows PowerShell 中,进入代码所在目录后执行: +```powershell +javac TemperatureConverter.java +``` diff --git a/TemperatureConverter.java b/TemperatureConverter.java new file mode 100644 index 0000000..abf8ca9 --- /dev/null +++ b/TemperatureConverter.java @@ -0,0 +1,142 @@ +import java.io.File; +import java.util.Scanner; + + +public class TemperatureConverter { + + /* + * 摄氏度转华氏度。 + * 参数:c 表示摄氏温度 + * 返回转换后的华氏温度 + */ + public static double celsiusToFahrenheit(double c) { + return c * 9.0 / 5.0 + 32.0; + } + + /* + * 华氏度转摄氏度。 + * 参数:f 表示华氏温度 + * 返回转换后的摄氏温度 + */ + public static double fahrenheitToCelsius(double f) { + return (f - 32.0) * 5.0 / 9.0; + } + + /* + * 程序入口。 + * 参数:args 为命令行参数,用于选择运行模式: + * 1) 无参数:交互式输入 + * 2) 两个参数:命令行模式(数值 + 单位) + * 3) --batch 文件名:批量模式 + */ + public static void main(String[] args) { + // 无参数:交互式(从控制台读一行:数值 单位) + if (args.length == 0) { + // 创建控制台输入对象 + Scanner sc = new Scanner(System.in); + System.out.print("请输入要转换的温度与单位(例如 36.6 C 或 97 F):"); + String input = sc.nextLine().trim(); + if (input.isEmpty()) { + System.out.println("输入为空,程序退出。"); + sc.close(); + return; + } + // 按空格切分:parts[0] 为数值,parts[1] + String[] parts = input.split("\\s+"); + try { + // 解析温度数值 + double value = Double.parseDouble(parts[0]); + // 没写单位时默认按 C 处理 + String unit = parts.length > 1 ? parts[1].toUpperCase() : "C"; + if (unit.startsWith("C")) { + double f = celsiusToFahrenheit(value); + // 左边显示用户原始输入,右边保留两位小数 + System.out.printf("%s °C = %.2f °F%n", parts[0], f); + } else if (unit.startsWith("F")) { + double c = fahrenheitToCelsius(value); + // 左边显示用户原始输入,右边保留两位小数 + System.out.printf("%s °F = %.2f °C%n", parts[0], c); + } else { + // 单位不认识就提示 + System.out.println("未知单位,请使用 C 或 F。"); + } + } catch (Exception e) { + // 输入不是“数字 + 单位”的格式,或数字解析失败,就给出提示 + System.out.println("输入解析失败,请按示例输入数值与单位,例如:36.6 C"); + } + sc.close(); + return; + } + + // --batch 文件名:批量转换(从文件逐行读取,每行:数值 单位) + if (args.length == 2 && args[0].equals("--batch")) { + try { + // 打开文件并逐行读取 + Scanner fileSc = new Scanner(new File(args[1])); + int lineNum = 0; + while (fileSc.hasNextLine()) { + lineNum++; + String line = fileSc.nextLine().trim(); + // 跳过空行、注释行 + if (line.isEmpty() || line.startsWith("#")) + continue; + String[] p = line.split("\\s+"); + try { + // 解析每行的温度数值与单位 + double val = Double.parseDouble(p[0]); + String u = p.length > 1 ? p[1].toUpperCase() : "C"; + if (u.startsWith("C")) { + // 左边显示文件中的原始数值文本,右边保留两位小数 + System.out.printf("%s °C = %.2f °F%n", p[0], celsiusToFahrenheit(val)); + } else if (u.startsWith("F")) { + // 左边显示文件中的原始数值文本,右边保留两位小数 + System.out.printf("%s °F = %.2f °C%n", p[0], fahrenheitToCelsius(val)); + } else { + // 单位不对:提示并跳过该行 + System.out.println("第" + lineNum + "行单位错误,已跳过"); + } + } catch (Exception e) { + // 某一行格式不对:提示并跳过,不影响后续行 + System.out.println("第" + lineNum + "行格式错误,已跳过:" + line); + } + } + // 文件读取完成后关闭 Scanner + fileSc.close(); + } catch (Exception e) { + // 文件打不开/找不到等情况:提示原因 + System.out.println("读取文件失败:" + e.getMessage()); + } + return; + } + + // 两个参数:命令行模式(直接从 args 读:数值 + 单位) + if (args.length == 2) { + try { + // 解析第一个参数为温度数值 + double value = Double.parseDouble(args[0]); + // 第二个参数为单位 + String unit = args[1].toUpperCase(); + if (unit.startsWith("C")) { + // 左边显示命令行原始参数,右边保留两位小数 + System.out.printf("%s °C = %.2f °F%n", args[0], celsiusToFahrenheit(value)); + } else if (unit.startsWith("F")) { + // 左边显示命令行原始参数,右边保留两位小数 + System.out.printf("%s °F = %.2f °C%n", args[0], fahrenheitToCelsius(value)); + } else { + // 单位不认识就提示 + System.out.println("未知单位,请使用 C 或 F。"); + } + } catch (Exception e) { + // 参数解析失败:给出用法提示 + System.out.println("参数格式错误,用法:java TemperatureConverter 36.6 C"); + } + return; + } + + // 参数不对:输出帮助信息 + System.out.println("用法:"); + System.out.println(" 交互式:java TemperatureConverter"); + System.out.println(" 命令行:java TemperatureConverter 36.6 C"); + System.out.println(" 批量: java TemperatureConverter --batch temperatures.txt"); + } +} diff --git a/ai协助记录.docx b/ai协助记录.docx new file mode 100644 index 0000000..b0175f6 Binary files /dev/null and b/ai协助记录.docx differ