From a40e310ba7a2e1f257e508c5206a30e04c399d96 Mon Sep 17 00:00:00 2001 From: zhouzihao Date: Tue, 10 Mar 2026 18:27:25 +0800 Subject: [PATCH] temperatureConverter.java --- TemperatureConverter | 164 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 TemperatureConverter diff --git a/TemperatureConverter b/TemperatureConverter new file mode 100644 index 0000000..99f4849 --- /dev/null +++ b/TemperatureConverter @@ -0,0 +1,164 @@ +/** + * 将摄氏度转换为华氏度 + */ +public static double celsiusToFahrenheit(double celsius) { + return celsius * 9.0 / 5.0 + 32.0; +} + +/** + * 将华氏度转换为摄氏度 + */ +public static double fahrenheitToCelsius(double fahrenheit) { + return (fahrenheit - 32.0) * 5.0 / 9.0; +} + +/** + * 转换单个温度值 + */ +public static String convertSingle(String valueStr, String unit) { + try { + double value = Double.parseDouble(valueStr); + unit = unit.toUpperCase(); + + if (unit.startsWith("C")) { + double result = celsiusToFahrenheit(value); + return String.format("%.2f °C = %.2f °F", value, result); + } else if (unit.startsWith("F")) { + double result = fahrenheitToCelsius(value); + return String.format("%.2f °F = %.2f °C", value, result); + } else { + return "错误:未知单位 '" + unit + "',请使用 C 或 F"; + } + } catch (NumberFormatException e) { + return "错误:无效的温度值 '" + valueStr + "'"; + } +} + +/** + * 解析并转换一行输入 + */ +public static String parseAndConvert(String line) { + line = line.trim(); + if (line.isEmpty() || line.startsWith("#")) { + return null; // 跳过空行和注释行 + } + + String[] parts = line.split("\\s+"); + if (parts.length < 1) { + return null; + } + + String valueStr = parts[0]; + String unit = (parts.length > 1) ? parts[1] : "C"; + + return convertSingle(valueStr, unit); +} + +/** + * 从文件批量转换温度 + */ +public static void convertFromFile(String filename) { + IO.println("从文件读取温度进行批量转换: " + filename); + IO.println("----------------------------------------"); + + try { + List lines = Files.readAllLines(Paths.get(filename)); + int lineNumber = 0; + int convertedCount = 0; + + for (String line : lines) { + lineNumber++; + String result = parseAndConvert(line); + + if (result != null) { + IO.println("第" + lineNumber + "行: " + result); + convertedCount++; + } + } + + IO.println("----------------------------------------"); + IO.println("批量转换完成,共转换 " + convertedCount + " 条温度数据"); + + } catch (FileNotFoundException e) { + System.err.println("错误:找不到文件 '" + filename + "'"); + } catch (IOException e) { + System.err.println("错误:读取文件时发生IO异常: " + e.getMessage()); + } +} + +/** + * 显示使用说明 + */ +public static void showUsage() { + IO.println("温度转换器使用说明:"); + IO.println("----------------------------------------"); + IO.println("1. 交互式模式:"); + IO.println(" java TemperatureConverter"); + IO.println(" (然后根据提示输入温度)"); + IO.println(); + IO.println("2. 命令行参数模式:"); + IO.println(" java TemperatureConverter <温度值> <单位>"); + IO.println(" 例如: java TemperatureConverter 36.6 C"); + IO.println(" java TemperatureConverter 97 F"); + IO.println(); + IO.println("3. 批量转换模式:"); + IO.println(" java TemperatureConverter <文件名>"); + IO.println(" 例如: java TemperatureConverter temperatures.txt"); + IO.println(); + IO.println("文件格式说明:"); + IO.println("- 每行一个温度,格式: <数值> <单位>"); + IO.println("- 单位可选: C(摄氏) 或 F(华氏),默认为C"); + IO.println("- 空行和以#开头的行将被忽略"); + IO.println("----------------------------------------"); +} + +void main(String[] args) { + // 检查是否有命令行参数 + if (args.length == 0) { + // 交互式模式 + interactiveMode(); + } else if (args.length == 1) { + // 批量转换模式(从文件读取) + convertFromFile(args[0]); + } else { + // 命令行参数模式 + String valueStr = args[0]; + String unit = args[1]; + String result = convertSingle(valueStr, unit); + IO.println(result); + } +} + +/** + * 交互式模式 + */ +public static void interactiveMode() { + Scanner scanner = new Scanner(System.in); + + IO.println("欢迎使用温度转换器!"); + showUsage(); + + while (true) { + IO.print("\n请输入要转换的温度与单位(例如 36.6 C 或 97 F,输入q退出):"); + String input = scanner.nextLine().trim(); + + // 检查是否退出 + if (input.equalsIgnoreCase("q") || input.equalsIgnoreCase("quit") || + input.equalsIgnoreCase("exit")) { + IO.println("感谢使用,再见!"); + break; + } + + // 检查是否为空 + if (input.isEmpty()) { + IO.println("输入为空,请重新输入。"); + continue; + } + + // 解析并转换 + String result = parseAndConvert(input); + IO.println(Objects.requireNonNullElse(result, "输入格式错误,请按示例输入。")); + } + + scanner.close(); +} \ No newline at end of file