Browse Source

w1作业上传

main
ZhengShiyi 1 month ago
parent
commit
1f1a11dcf5
  1. 24
      w1/AI协助记录.txt
  2. 8
      w1/HelloWorld.java
  3. 106
      w1/README.md
  4. 240
      w1/TemperatureConverter.java
  5. 10
      w1/temps.txt
  6. 0
      w1/运行截图.png

24
AI协助记录.txt → w1/AI协助记录.txt

@ -1,12 +1,12 @@
核心 prompt : 核心 prompt :
1. 修复温度转换 Java 代码的空格分割问题; 1. 修复温度转换 Java 代码的空格分割问题;
2. 实现批量读取文件转换温度的功能; 2. 实现批量读取文件转换温度的功能;
3. 编写规范的 README.md 运行说明; 3. 编写规范的 README.md 运行说明;
4. 指导命令行编译运行的正确步骤。 4. 指导命令行编译运行的正确步骤。
AI 的帮助: AI 的帮助:
1.修正了代码中 split ("") 的分割逻辑为 split ("\s+"),解决单位识别失败问题; 1.修正了代码中 split ("") 的分割逻辑为 split ("\s+"),解决单位识别失败问题;
2.提供了完整的批量转换方法代码,实现从 temps.txt 批量处理温度; 2.提供了完整的批量转换方法代码,实现从 temps.txt 批量处理温度;
3.整理了包含编译 / 运行命令、示例的 README.md 模板; 3.整理了包含编译 / 运行命令、示例的 README.md 模板;
4.解决了编译报错、文件路径等问题; 4.解决了编译报错、文件路径等问题;
5. 检查代码结构与语法错误,指出方法位置错误、括号不匹配等问题,让程序能正常编译运行。 5. 检查代码结构与语法错误,指出方法位置错误、括号不匹配等问题,让程序能正常编译运行。

8
HelloWorld.java → w1/HelloWorld.java

@ -1,5 +1,5 @@
public class HelloWorld { public class HelloWorld {
public static void main(String[] args) { public static void main(String[] args) {
System.out.println("Hello World!"); System.out.println("Hello World!");
} }
} }

106
README.md → w1/README.md

@ -1,54 +1,54 @@
# 温度转换器(Java版) # 温度转换器(Java版)
## 功能说明 ## 功能说明
实现摄氏度(C)和华氏度(F)互转,支持三种使用方式: 实现摄氏度(C)和华氏度(F)互转,支持三种使用方式:
1. 交互式输入(控制台提示输入) 1. 交互式输入(控制台提示输入)
2. 命令行参数输入(加分项) 2. 命令行参数输入(加分项)
3. 批量转换(从文件读取多行温度,加分项) 3. 批量转换(从文件读取多行温度,加分项)
## 编译命令 ## 编译命令
在代码所在目录执行: 在代码所在目录执行:
```bash ```bash
javac -encoding UTF-8 TemperatureConverter.java javac -encoding UTF-8 TemperatureConverter.java
## 运行命令 ## 运行命令
方式 1:交互式运行(含批量转换) 方式 1:交互式运行(含批量转换)
```bash ```bash
java TemperatureConverter java TemperatureConverter
- 先按提示输入单条温度(例如:36.6 C); - 先按提示输入单条温度(例如:36.6 C);
-程序自动读取同目录下 temps.txt 文件,批量转换所有行的温度。 -程序自动读取同目录下 temps.txt 文件,批量转换所有行的温度。
方式 2:命令行参数运行 方式 2:命令行参数运行
```bash ```bash
java TemperatureConverter 36.6 C java TemperatureConverter 36.6 C
# 或 # 或
```bash ```bash
java TemperatureConverter 97 F java TemperatureConverter 97 F
## 运行示例 ## 运行示例
示例 1:交互式 + 批量转换 示例 1:交互式 + 批量转换
输入: 输入:
36.6 C 36.6 C
输出: 输出:
36.60 °C = 97.88 °F 36.60 °C = 97.88 °F
===== 批量转换开始 ===== ===== 批量转换开始 =====
处理:36.6 C → 36.60 °C = 97.88 °F 处理:36.6 C → 36.60 °C = 97.88 °F
处理:97 F → 97.00 °F = 36.11 °C 处理:97 F → 97.00 °F = 36.11 °C
处理:100 C → 100.00 °C = 212.00 °F 处理:100 C → 100.00 °C = 212.00 °F
处理:212 F → 212.00 °F = 100.00 °C 处理:212 F → 212.00 °F = 100.00 °C
处理:25 C → 25.00 °C = 77.00 °F 处理:25 C → 25.00 °C = 77.00 °F
处理:77 F → 77.00 °F = 25.00 °C 处理:77 F → 77.00 °F = 25.00 °C
===== 批量转换结束 ===== ===== 批量转换结束 =====
示例 2:命令行转换华氏度到摄氏度 示例 2:命令行转换华氏度到摄氏度
输入命令:java TemperatureConverter 97 F输出:97.00 °F = 36.11 °C 输入命令:java TemperatureConverter 97 F输出:97.00 °F = 36.11 °C
批量转换说明 批量转换说明
1. 需在代码同目录下创建 temps.txt 文件; 1. 需在代码同目录下创建 temps.txt 文件;
2. 文件每行格式为「数值 单位」(例如:36.6 C); 2. 文件每行格式为「数值 单位」(例如:36.6 C);
3. 运行交互式模式时,程序自动执行批量转换。 3. 运行交互式模式时,程序自动执行批量转换。
注:批量转换所需的 temps.txt 文件因平台上传数量限制未单独上传,文件内容为: 注:批量转换所需的 temps.txt 文件因平台上传数量限制未单独上传,文件内容为:
36.6 C 36.6 C
97 F 97 F
100 C 100 C
212 F 212 F

240
TemperatureConverter.java → w1/TemperatureConverter.java

@ -1,121 +1,121 @@
import java.util.Scanner; import java.util.Scanner;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.FileReader; import java.io.FileReader;
import java.io.IOException; import java.io.IOException;
/** /**
* 温度转换器程序Java版 * 温度转换器程序Java版
* 支持摄氏度(C)与华氏度(F)之间互转 * 支持摄氏度(C)与华氏度(F)之间互转
* 支持三种输入方式 * 支持三种输入方式
* 1. 交互式输入控制台提示输入 * 1. 交互式输入控制台提示输入
* 2. 命令行参数例如java TemperatureConverter 36.6 C * 2. 命令行参数例如java TemperatureConverter 36.6 C
* 3. 批量转换从temps.txt文件读取多行温度 * 3. 批量转换从temps.txt文件读取多行温度
*/ */
public class TemperatureConverter { public class TemperatureConverter {
/** /**
* 将摄氏度转换为华氏度 * 将摄氏度转换为华氏度
* @param c 摄氏温度浮点数 * @param c 摄氏温度浮点数
* @return 对应的华氏温度浮点数 * @return 对应的华氏温度浮点数
*/ */
public static double celsiusToFahrenheit(double c) { public static double celsiusToFahrenheit(double c) {
return c * 9.0 / 5.0 + 32.0; return c * 9.0 / 5.0 + 32.0;
} }
/** /**
* 将华氏度转换为摄氏度 * 将华氏度转换为摄氏度
* @param f 华氏温度浮点数 * @param f 华氏温度浮点数
* @return 对应的摄氏温度浮点数 * @return 对应的摄氏温度浮点数
*/ */
public static double fahrenheitToCelsius(double f) { public static double fahrenheitToCelsius(double f) {
return (f - 32.0) * 5.0 / 9.0; return (f - 32.0) * 5.0 / 9.0;
} }
/** /**
* 处理温度转换的核心逻辑 * 处理温度转换的核心逻辑
* @param value 温度数值 * @param value 温度数值
* @param unit 温度单位C/F不区分大小写 * @param unit 温度单位C/F不区分大小写
*/ */
public static void convert(double value, String unit) { public static void convert(double value, String unit) {
String upperUnit = unit.toUpperCase(); String upperUnit = unit.toUpperCase();
if (upperUnit.equals("C")) { if (upperUnit.equals("C")) {
double f = celsiusToFahrenheit(value); double f = celsiusToFahrenheit(value);
System.out.printf("%.2f °C = %.2f °F%n", value, f); System.out.printf("%.2f °C = %.2f °F%n", value, f);
} else if (upperUnit.equals("F")) { } else if (upperUnit.equals("F")) {
double c = fahrenheitToCelsius(value); double c = fahrenheitToCelsius(value);
System.out.printf("%.2f °F = %.2f °C%n", value, c); System.out.printf("%.2f °F = %.2f °C%n", value, c);
} else { } else {
System.out.println("未知单位,请使用 C 或 F。"); System.out.println("未知单位,请使用 C 或 F。");
} }
} }
/** /**
* 交互式输入模式和Python原版一致 * 交互式输入模式和Python原版一致
*/ */
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 s = scanner.nextLine().trim(); String s = scanner.nextLine().trim();
scanner.close(); scanner.close();
if (s.isEmpty()) { if (s.isEmpty()) {
System.out.println("输入为空,程序退出。"); System.out.println("输入为空,程序退出。");
return; return;
} }
try { try {
String[] parts = s.split("\\s+"); String[] parts = s.split("\\s+");
double value = Double.parseDouble(parts[0]); double value = Double.parseDouble(parts[0]);
// 若用户只输数值,默认按摄氏度处理 // 若用户只输数值,默认按摄氏度处理
String unit = parts.length > 1 ? parts[1] : "C"; String unit = parts.length > 1 ? parts[1] : "C";
convert(value, unit); convert(value, unit);
} catch (Exception e) { } catch (Exception e) {
System.out.println("输入解析失败,请按示例输入数值与单位,例如:36.6 C"); System.out.println("输入解析失败,请按示例输入数值与单位,例如:36.6 C");
} }
} }
/** /**
* 批量转换从文件读取多行温度并输出结果加分项 * 批量转换从文件读取多行温度并输出结果加分项
* @param filePath 文件路径每行格式数值 单位例如 36.6 C * @param filePath 文件路径每行格式数值 单位例如 36.6 C
*/ */
public static void batchConvert(String filePath) { public static void batchConvert(String filePath) {
try (BufferedReader br = new BufferedReader(new FileReader(filePath))) { try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
String line; String line;
System.out.println("\n===== 批量转换开始 ====="); System.out.println("\n===== 批量转换开始 =====");
while ((line = br.readLine()) != null) { while ((line = br.readLine()) != null) {
String trimLine = line.trim(); String trimLine = line.trim();
// 跳过空行 // 跳过空行
if (trimLine.isEmpty()) continue; if (trimLine.isEmpty()) continue;
try { try {
String[] parts = trimLine.split("\\s+"); String[] parts = trimLine.split("\\s+");
double value = Double.parseDouble(parts[0]); double value = Double.parseDouble(parts[0]);
String unit = parts.length > 1 ? parts[1] : "C"; String unit = parts.length > 1 ? parts[1] : "C";
System.out.print("处理:" + line + " → "); System.out.print("处理:" + line + " → ");
convert(value, unit); convert(value, unit);
} catch (Exception e) { } catch (Exception e) {
System.out.println("行「" + line + "」格式错误,跳过"); System.out.println("行「" + line + "」格式错误,跳过");
} }
} }
System.out.println("===== 批量转换结束 =====\n"); System.out.println("===== 批量转换结束 =====\n");
} catch (IOException e) { } catch (IOException e) {
System.out.println("\n读取文件失败:找不到 " + filePath + " 文件(请确认文件在同目录下)\n"); System.out.println("\n读取文件失败:找不到 " + filePath + " 文件(请确认文件在同目录下)\n");
} }
} }
public static void main(String[] args) { public static void main(String[] args) {
// 优先处理命令行参数模式(加分项) // 优先处理命令行参数模式(加分项)
if (args.length >= 2) { if (args.length >= 2) {
try { try {
double value = Double.parseDouble(args[0]); double value = Double.parseDouble(args[0]);
String unit = args[1]; String unit = args[1];
convert(value, unit); convert(value, unit);
} catch (Exception e) { } catch (Exception e) {
System.out.println("命令行参数解析失败!示例用法:java TemperatureConverter 36.6 C"); System.out.println("命令行参数解析失败!示例用法:java TemperatureConverter 36.6 C");
} }
} else { } else {
// 无命令行参数则进入交互式模式 + 批量转换 // 无命令行参数则进入交互式模式 + 批量转换
interactiveMode(); interactiveMode();
batchConvert("temps.txt"); batchConvert("temps.txt");
} }
} }
} }

10
temps.txt → w1/temps.txt

@ -1,6 +1,6 @@
36.6 C 36.6 C
97 F 97 F
100 C 100 C
212 F 212 F
25 C 25 C
77 F 77 F

0
运行截图.png → w1/运行截图.png

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 96 KiB

Loading…
Cancel
Save