4 changed files with 168 additions and 0 deletions
@ -0,0 +1,10 @@ |
|||
Prompt 记录: |
|||
"将下面的 Python 温度转换程序改写为等效的 Java 程序,保留注释并保证功能一致。" |
|||
"添加命令行参数支持作为加分项,例如 java TemperatureConverter 36.6 C" |
|||
"增加批量文件处理功能,从文件读取多行温度并输出结果" |
|||
"帮我创建一个完整的 README.md,包含编译运行命令和示例" |
|||
AI 帮助总结: |
|||
通过AI协助完成了Python到Java的代码移植,自动转换了语法结构,AI还帮助实现了两种更复杂的功能,并生成了完整的文档说明。 |
|||
把Python代码翻译成了Java,自动处理了两种语言不一样的地方,加上了命令行参数和批量处理两个功能 |
|||
会写README文档,学会了它是什么。 |
|||
|
|||
@ -0,0 +1,22 @@ |
|||
# 温度转换器 (Temperature Converter) |
|||
## 编译 |
|||
打开命令行终端,进入程序所在目录,执行以下命令: |
|||
```bash |
|||
javac TemperatureConverter.java |
|||
``` |
|||
## 运行 |
|||
### 模式一:交互模式(推荐初学者使用) |
|||
这是最基础的模式,程序会提示你输入温度: |
|||
```bash |
|||
java TemperatureConverter |
|||
``` |
|||
### 模式二:命令行参数模式(加分功能) |
|||
直接通过命令参数传入温度和单位: |
|||
```bash |
|||
java TemperatureConverter 数值 单位 |
|||
``` |
|||
### 模式三:批量文件模式(加分功能) |
|||
从文本文件中读取多行温度进行批量转换 |
|||
```bash |
|||
java TemperatureConverter -f temperatures.txt |
|||
``` |
|||
@ -0,0 +1,136 @@ |
|||
import java.io.*; |
|||
import java.nio.file.*; |
|||
import java.util.*; |
|||
import java.util.stream.Stream; |
|||
|
|||
/** |
|||
* 温度转换器 - 支持摄氏度(C)与华氏度(F)之间互转 |
|||
* 对应Python原版:TemperatureConverter.py |
|||
* |
|||
* 功能增强: |
|||
* 1. 交互模式:直接运行,提示用户输入 |
|||
* 2. 命令行参数模式:java TemperatureConverter <数值> <单位> |
|||
* 3. 批量文件处理:java TemperatureConverter -f <文件名> |
|||
* |
|||
* @author 移植自Python示例 |
|||
*/ |
|||
public class TemperatureConverter { |
|||
|
|||
/** |
|||
* 将摄氏度转换为华氏度。 |
|||
* |
|||
* @param c 摄氏温度 (float) |
|||
* @return 对应的华氏温度 (float) |
|||
*/ |
|||
public static float celsiusToFahrenheit(float c) { |
|||
return c * 9.0f / 5.0f + 32.0f; |
|||
} |
|||
|
|||
/** |
|||
* 将华氏度转换为摄氏度。 |
|||
* |
|||
* @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 转换结果字符串,或错误信息 |
|||
*/ |
|||
public static String convertSingle(String input) { |
|||
if (input == null || input.trim().isEmpty()) { |
|||
return "输入为空,跳过。"; |
|||
} |
|||
|
|||
String[] parts = input.trim().split("\\s+"); |
|||
try { |
|||
float value = Float.parseFloat(parts[0]); |
|||
String unit = (parts.length > 1) ? parts[1].toUpperCase() : "C"; |
|||
|
|||
if (unit.startsWith("C")) { |
|||
float f = celsiusToFahrenheit(value); |
|||
return String.format("%.2f °C = %.2f °F", value, f); |
|||
} else if (unit.startsWith("F")) { |
|||
float c = fahrenheitToCelsius(value); |
|||
return String.format("%.2f °F = %.2f °C", value, c); |
|||
} else { |
|||
return "未知单位,请使用 C 或 F。"; |
|||
} |
|||
} catch (NumberFormatException e) { |
|||
return "数值解析失败,请确保第一项是数字。"; |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 交互模式:从标准输入读取一行并转换 |
|||
*/ |
|||
private static void interactiveMode() { |
|||
Scanner scanner = new Scanner(System.in); |
|||
System.out.println("请输入要转换的温度与单位(例如 36.6 C 或 97 F):"); |
|||
String line = scanner.nextLine(); |
|||
String result = convertSingle(line); |
|||
System.out.println(result); |
|||
scanner.close(); |
|||
} |
|||
|
|||
/** |
|||
* 命令行参数模式:直接使用参数转换 |
|||
* @param args 两个参数:数值 单位 |
|||
*/ |
|||
private static void argMode(String[] args) { |
|||
if (args.length < 1) { |
|||
System.out.println("错误:缺少参数。用法:java TemperatureConverter <数值> [单位]"); |
|||
return; |
|||
} |
|||
// 将命令行参数拼接成标准输入格式
|
|||
String input = String.join(" ", args); |
|||
String result = convertSingle(input); |
|||
System.out.println(result); |
|||
} |
|||
|
|||
/** |
|||
* 批量文件模式:读取文件每行,进行转换并输出到控制台 |
|||
* @param filename 文件名 |
|||
*/ |
|||
private static void batchMode(String filename) { |
|||
Path path = Paths.get(filename); |
|||
if (!Files.exists(path)) { |
|||
System.out.println("错误:文件 " + filename + " 不存在。"); |
|||
return; |
|||
} |
|||
|
|||
System.out.println("批量转换文件:" + filename); |
|||
try (Stream<String> lines = Files.lines(path)) { |
|||
lines.forEach(line -> { |
|||
String result = convertSingle(line); |
|||
System.out.println("输入: " + line + " -> " + result); |
|||
}); |
|||
} catch (IOException e) { |
|||
System.out.println("读取文件时出错: " + e.getMessage()); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 主程序入口 |
|||
* 支持三种运行模式: |
|||
* 1. 无参数:交互模式 |
|||
* 2. -f <文件>:批量文件模式 |
|||
* 3. 其他参数:命令行参数模式 |
|||
*/ |
|||
public static void main(String[] args) { |
|||
if (args.length == 0) { |
|||
// 无参数:交互模式(原Python main行为)
|
|||
interactiveMode(); |
|||
} else if (args.length >= 2 && args[0].equals("-f")) { |
|||
// -f 文件名:批量文件模式(加分项)
|
|||
batchMode(args[1]); |
|||
} else { |
|||
// 其他:视为命令行参数模式(加分项)
|
|||
argMode(args); |
|||
} |
|||
} |
|||
} |
|||
|
After Width: | Height: | Size: 128 KiB |
Loading…
Reference in new issue