diff --git a/w1-宋瑞-202506050301/2859457bbace2a2626fd4577e7a1d5f7.png b/w1-宋瑞-202506050301/2859457bbace2a2626fd4577e7a1d5f7.png new file mode 100644 index 0000000..e69de29 diff --git a/w1-宋瑞-202506050301/AI协助.txt b/w1-宋瑞-202506050301/AI协助.txt new file mode 100644 index 0000000..e69de29 diff --git a/w1-宋瑞-202506050301/README.md b/w1-宋瑞-202506050301/README.md new file mode 100644 index 0000000..e69de29 diff --git a/TemperatureConverter/TemperatureConverter.java b/w1-宋瑞-202506050301/TemperatureConverter.java similarity index 97% rename from TemperatureConverter/TemperatureConverter.java rename to w1-宋瑞-202506050301/TemperatureConverter.java index 805b5ca..9bb3e75 100644 --- a/TemperatureConverter/TemperatureConverter.java +++ b/w1-宋瑞-202506050301/TemperatureConverter.java @@ -1,238 +1,238 @@ - -import java.util.Scanner; - -/** - * 温度转换器 - Java 版本 - * 支持摄氏度(C)与华氏度(F)之间互转 - * - */ -public class TemperatureConverter { - - /** - * 将摄氏度转换为华氏度 - * - * 转换公式:F = C × 9/5 + 32 - * - * @param c 摄氏温度值(float 类型) - * @return 对应的华氏温度值(float 类型) - */ - public static float celsiusToFahrenheit(float c) { - return c * 9.0f / 5.0f + 32.0f; - } - - /** - * 将华氏度转换为摄氏度 - * - * 转换公式:C = (F - 32) × 5/9 - * - * @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 包含温度值和单位的数组,[0] 为数值,[1] 为单位 - * @throws IllegalArgumentException 当输入格式不正确时抛出 - */ - public static float[] parseInput(String input) throws IllegalArgumentException { - if (input == null || input.trim().isEmpty()) { - throw new IllegalArgumentException("输入为空"); - } - - String[] parts = input.trim().split("\\s+"); - - if (parts.length < 1) { - throw new IllegalArgumentException("输入格式错误,缺少温度值"); - } - - float value; - try { - value = Float.parseFloat(parts[0]); - } catch (NumberFormatException e) { - throw new IllegalArgumentException("温度值必须是数字:" + parts[0]); - } - - // 默认单位为摄氏度 - String unit = "C"; - if (parts.length > 1) { - unit = parts[1].toUpperCase(); - } - - // 验证单位是否合法 - if (!unit.startsWith("C") && !unit.startsWith("F")) { - throw new IllegalArgumentException("未知单位 '" + unit + "',请使用 C 或 F"); - } - - return new float[]{value, unit.equals("F") ? 1.0f : 0.0f}; - } - - /** - * 执行温度转换并返回结果字符串 - * - * @param value 温度数值 - * @param isFahrenheit true 表示华氏度,false 表示摄氏度 - * @return 格式化后的转换结果字符串 - */ - public static String convertAndFormat(float value, boolean isFahrenheit) { - if (isFahrenheit) { - // 从华氏度转换为摄氏度 - float celsius = fahrenheitToCelsius(value); - return String.format("%.2f °F = %.2f °C", value, celsius); - } else { - // 从摄氏度转换为华氏度 - float fahrenheit = celsiusToFahrenheit(value); - return String.format("%.2f °C = %.2f °F", value, fahrenheit); - } - } - - /** - * 交互式模式:从标准输入读取用户输入并转换 - */ - public static void interactiveMode() { - Scanner scanner = new Scanner(System.in); - - System.out.print("请输入要转换的温度与单位(例如 36.6 C 或 97 F):"); - String input = scanner.nextLine().trim(); - - if (input.isEmpty()) { - System.out.println("输入为空,程序退出。"); - scanner.close(); - return; - } - - try { - float[] parsed = parseInput(input); - float value = parsed[0]; - boolean isFahrenheit = (parsed[1] == 1.0f); - - String result = convertAndFormat(value, isFahrenheit); - System.out.println(result); - - } catch (IllegalArgumentException e) { - System.out.println("输入解析失败:" + e.getMessage()); - System.out.println("请按示例输入数值与单位,例如:36.6 C"); - } finally { - scanner.close(); - } - } - - /** - * 命令行参数模式:直接从命令行参数获取温度值并转换 - * - * @param args 命令行参数,格式:[温度值] [单位] - * 例如:java TemperatureConverter 36.6 C - */ - public static void commandLineMode(String[] args) { - if (args.length < 1) { - System.out.println("用法:java TemperatureConverter <温度值> [单位]"); - System.out.println("示例:java TemperatureConverter 36.6 C"); - System.out.println(" java TemperatureConverter 97 F"); - return; - } - - try { - float value = Float.parseFloat(args[0]); - String unit = (args.length > 1) ? args[1].toUpperCase() : "C"; - - // 验证单位 - if (!unit.startsWith("C") && !unit.startsWith("F")) { - throw new IllegalArgumentException("未知单位 '" + unit + "',请使用 C 或 F"); - } - - boolean isFahrenheit = unit.startsWith("F"); - String result = convertAndFormat(value, isFahrenheit); - System.out.println(result); - - } catch (NumberFormatException e) { - System.out.println("错误:温度值必须是数字,收到:" + args[0]); - } catch (IllegalArgumentException e) { - System.out.println("错误:" + e.getMessage()); - } - } - - /** - * 批量转换模式:从文件读取多行温度数据并转换 - * - * @param lines 包含多行温度数据的字符串数组 - */ - public static void batchConvertMode(String[] lines) { - if (lines == null || lines.length == 0) { - System.out.println("没有数据需要转换"); - return; - } - - System.out.println("=== 批量转换开始 ==="); - int successCount = 0; - int failCount = 0; - - for (int i = 0; i < lines.length; i++) { - String line = lines[i].trim(); - if (line.isEmpty()) { - continue; - } - - System.out.printf("第 %d 行:", i + 1); - try { - float[] parsed = parseInput(line); - float value = parsed[0]; - boolean isFahrenheit = (parsed[1] == 1.0f); - - String result = convertAndFormat(value, isFahrenheit); - System.out.println(result); - successCount++; - - } catch (IllegalArgumentException e) { - System.out.println("失败 - " + e.getMessage()); - failCount++; - } - } - - System.out.println("=== 批量转换结束 ==="); - System.out.printf("成功:%d 条,失败:%d 条%n", successCount, failCount); - } - - /** - * 程序主入口 - * - * 支持三种运行模式: - * 1. 无参数:进入交互式模式 - * 2. 有命令行参数:进入命令行参数模式 - * 3. 特殊参数 --batch:进入批量转换模式(从标准输入读取多行) - * - * @param args 命令行参数 - */ - public static void main(String[] args) { - // 检查是否为批量转换模式 - if (args.length > 0 && "--batch".equals(args[0])) { - System.out.println("进入批量转换模式,请输入多行温度数据(每行格式:数值 单位),输入空行结束:"); - Scanner scanner = new Scanner(System.in); - java.util.List lines = new java.util.ArrayList<>(); - - while (true) { - String line = scanner.nextLine().trim(); - if (line.isEmpty()) { - break; - } - lines.add(line); - } - - scanner.close(); - batchConvertMode(lines.toArray(new String[0])); - return; - } - - // 根据是否有命令行参数选择模式 - if (args.length > 0) { - // 命令行参数模式 - commandLineMode(args); - } else { - // 交互式模式 - interactiveMode(); - } - } -} + +import java.util.Scanner; + +/** + * 温度转换器 - Java 版本 + * 支持摄氏度(C)与华氏度(F)之间互转 + * + */ +public class TemperatureConverter { + + /** + * 将摄氏度转换为华氏度 + * + * 转换公式:F = C × 9/5 + 32 + * + * @param c 摄氏温度值(float 类型) + * @return 对应的华氏温度值(float 类型) + */ + public static float celsiusToFahrenheit(float c) { + return c * 9.0f / 5.0f + 32.0f; + } + + /** + * 将华氏度转换为摄氏度 + * + * 转换公式:C = (F - 32) × 5/9 + * + * @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 包含温度值和单位的数组,[0] 为数值,[1] 为单位 + * @throws IllegalArgumentException 当输入格式不正确时抛出 + */ + public static float[] parseInput(String input) throws IllegalArgumentException { + if (input == null || input.trim().isEmpty()) { + throw new IllegalArgumentException("输入为空"); + } + + String[] parts = input.trim().split("\\s+"); + + if (parts.length < 1) { + throw new IllegalArgumentException("输入格式错误,缺少温度值"); + } + + float value; + try { + value = Float.parseFloat(parts[0]); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("温度值必须是数字:" + parts[0]); + } + + // 默认单位为摄氏度 + String unit = "C"; + if (parts.length > 1) { + unit = parts[1].toUpperCase(); + } + + // 验证单位是否合法 + if (!unit.startsWith("C") && !unit.startsWith("F")) { + throw new IllegalArgumentException("未知单位 '" + unit + "',请使用 C 或 F"); + } + + return new float[]{value, unit.equals("F") ? 1.0f : 0.0f}; + } + + /** + * 执行温度转换并返回结果字符串 + * + * @param value 温度数值 + * @param isFahrenheit true 表示华氏度,false 表示摄氏度 + * @return 格式化后的转换结果字符串 + */ + public static String convertAndFormat(float value, boolean isFahrenheit) { + if (isFahrenheit) { + // 从华氏度转换为摄氏度 + float celsius = fahrenheitToCelsius(value); + return String.format("%.2f °F = %.2f °C", value, celsius); + } else { + // 从摄氏度转换为华氏度 + float fahrenheit = celsiusToFahrenheit(value); + return String.format("%.2f °C = %.2f °F", value, fahrenheit); + } + } + + /** + * 交互式模式:从标准输入读取用户输入并转换 + */ + public static void interactiveMode() { + Scanner scanner = new Scanner(System.in); + + System.out.print("请输入要转换的温度与单位(例如 36.6 C 或 97 F):"); + String input = scanner.nextLine().trim(); + + if (input.isEmpty()) { + System.out.println("输入为空,程序退出。"); + scanner.close(); + return; + } + + try { + float[] parsed = parseInput(input); + float value = parsed[0]; + boolean isFahrenheit = (parsed[1] == 1.0f); + + String result = convertAndFormat(value, isFahrenheit); + System.out.println(result); + + } catch (IllegalArgumentException e) { + System.out.println("输入解析失败:" + e.getMessage()); + System.out.println("请按示例输入数值与单位,例如:36.6 C"); + } finally { + scanner.close(); + } + } + + /** + * 命令行参数模式:直接从命令行参数获取温度值并转换 + * + * @param args 命令行参数,格式:[温度值] [单位] + * 例如:java TemperatureConverter 36.6 C + */ + public static void commandLineMode(String[] args) { + if (args.length < 1) { + System.out.println("用法:java TemperatureConverter <温度值> [单位]"); + System.out.println("示例:java TemperatureConverter 36.6 C"); + System.out.println(" java TemperatureConverter 97 F"); + return; + } + + try { + float value = Float.parseFloat(args[0]); + String unit = (args.length > 1) ? args[1].toUpperCase() : "C"; + + // 验证单位 + if (!unit.startsWith("C") && !unit.startsWith("F")) { + throw new IllegalArgumentException("未知单位 '" + unit + "',请使用 C 或 F"); + } + + boolean isFahrenheit = unit.startsWith("F"); + String result = convertAndFormat(value, isFahrenheit); + System.out.println(result); + + } catch (NumberFormatException e) { + System.out.println("错误:温度值必须是数字,收到:" + args[0]); + } catch (IllegalArgumentException e) { + System.out.println("错误:" + e.getMessage()); + } + } + + /** + * 批量转换模式:从文件读取多行温度数据并转换 + * + * @param lines 包含多行温度数据的字符串数组 + */ + public static void batchConvertMode(String[] lines) { + if (lines == null || lines.length == 0) { + System.out.println("没有数据需要转换"); + return; + } + + System.out.println("=== 批量转换开始 ==="); + int successCount = 0; + int failCount = 0; + + for (int i = 0; i < lines.length; i++) { + String line = lines[i].trim(); + if (line.isEmpty()) { + continue; + } + + System.out.printf("第 %d 行:", i + 1); + try { + float[] parsed = parseInput(line); + float value = parsed[0]; + boolean isFahrenheit = (parsed[1] == 1.0f); + + String result = convertAndFormat(value, isFahrenheit); + System.out.println(result); + successCount++; + + } catch (IllegalArgumentException e) { + System.out.println("失败 - " + e.getMessage()); + failCount++; + } + } + + System.out.println("=== 批量转换结束 ==="); + System.out.printf("成功:%d 条,失败:%d 条%n", successCount, failCount); + } + + /** + * 程序主入口 + * + * 支持三种运行模式: + * 1. 无参数:进入交互式模式 + * 2. 有命令行参数:进入命令行参数模式 + * 3. 特殊参数 --batch:进入批量转换模式(从标准输入读取多行) + * + * @param args 命令行参数 + */ + public static void main(String[] args) { + // 检查是否为批量转换模式 + if (args.length > 0 && "--batch".equals(args[0])) { + System.out.println("进入批量转换模式,请输入多行温度数据(每行格式:数值 单位),输入空行结束:"); + Scanner scanner = new Scanner(System.in); + java.util.List lines = new java.util.ArrayList<>(); + + while (true) { + String line = scanner.nextLine().trim(); + if (line.isEmpty()) { + break; + } + lines.add(line); + } + + scanner.close(); + batchConvertMode(lines.toArray(new String[0])); + return; + } + + // 根据是否有命令行参数选择模式 + if (args.length > 0) { + // 命令行参数模式 + commandLineMode(args); + } else { + // 交互式模式 + interactiveMode(); + } + } +}