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