Compare commits

...

2 Commits

  1. 0
      w1-宋瑞-202506050301/2859457bbace2a2626fd4577e7a1d5f7.png
  2. 0
      w1-宋瑞-202506050301/AI协助.txt
  3. 0
      w1-宋瑞-202506050301/README.md
  4. 476
      w1-宋瑞-202506050301/TemperatureConverter.java

0
w1-宋瑞-202506050301/2859457bbace2a2626fd4577e7a1d5f7.png

0
w1-宋瑞-202506050301/AI协助.txt

0
w1-宋瑞-202506050301/README.md

476
TemperatureConverter/TemperatureConverter.java → w1-宋瑞-202506050301/TemperatureConverter.java

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