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