import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.Scanner; /** * 温度转换器示例程序(Java) - 增强版 * 支持摄氏度(C) ↔ 华氏度(F) 互转 * 支持三种使用方式: * 1. 交互模式(不带参数) * 2. 单次命令行参数模式:java TemperatureConverter 36.6 C * 3. 批量文件模式:java TemperatureConverter input.txt */ public class TemperatureConverter { /** * 将摄氏度转换为华氏度 * 公式:F = C × 9/5 + 32 * * @param c 摄氏温度 * @return 华氏温度 */ public static float celsiusToFahrenheit(float c) { return c * 9.0f / 5.0f + 32.0f; } /** * 将华氏度转换为摄氏度 * 公式:C = (F - 32) × 5/9 * * @param f 华氏温度 * @return 摄氏温度 */ public static float fahrenheitToCelsius(float f) { return (f - 32.0f) * 5.0f / 9.0f; } /** * 解析单行温度字符串并返回转换结果(字符串形式) * * @param line 一行输入,例如 "36.6 C" 或 "98.6" 或 "99 F" * @return 转换结果字符串,或错误信息 */ public static String convertLine(String line) { if (line == null || line.trim().isEmpty()) { return null; } String[] parts = line.trim().split("\\s+"); float value; String unit = "C"; // 默认摄氏 try { value = Float.parseFloat(parts[0]); if (parts.length > 1) { unit = parts[1].trim().toUpperCase(); } } catch (NumberFormatException e) { return "格式错误: " + line; } 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 "未知单位: " + line; } } public static void main(String[] args) { // 1. 命令行单次转换模式 if (args.length == 2) { String input = args[0] + " " + args[1]; String result = convertLine(input); if (result != null) { System.out.println(result); } return; } // 2. 批量文件模式 if (args.length == 1) { String filename = args[0]; System.out.println("正在处理文件: " + filename); System.out.println("----------------------------------------"); try (BufferedReader br = new BufferedReader(new FileReader(filename))) { String line; int lineNum = 0; while ((line = br.readLine()) != null) { lineNum++; String result = convertLine(line); if (result != null) { System.out.printf("第 %2d 行: %s%n", lineNum, result); } } System.out.println("----------------------------------------"); System.out.println("处理完成,共读取 " + lineNum + " 行"); } catch (IOException e) { System.err.println("无法读取文件: " + filename); System.err.println(e.getMessage()); } return; } // 3. 交互模式(无参数) Scanner scanner = new Scanner(System.in); System.out.println("温度转换器(支持 C / F)"); System.out.println("输入格式示例:36.6 C 或 98.6 F 或 23.5(默认C)"); System.out.println("输入空行或 Ctrl+C 退出\n"); while (true) { System.out.print("> "); String line = scanner.nextLine().trim(); if (line.isEmpty()) { System.out.println("再见!"); break; } String result = convertLine(line); if (result != null) { System.out.println(result); } else { System.out.println("(已跳过空行)"); } } scanner.close(); } }