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); } } }