1 changed files with 164 additions and 0 deletions
@ -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<String> 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(); |
|||
} |
|||
Loading…
Reference in new issue