Browse Source

上传文件至 ''

main
Zhangxinyue 1 month ago
parent
commit
36152c2c22
  1. BIN
      Java运行结果.png
  2. 16
      README.md
  3. 142
      TemperatureConverter.java
  4. BIN
      ai协助记录.docx

BIN
Java运行结果.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

16
README.md

@ -1,2 +1,14 @@
# java
# TemperatureConverter
将 Python 温度转换程序改写为等效 Java 程序,实现摄氏温度与华氏温度的双向转换。
## 功能说明
支持交互式输入:程序启动后等待用户输入温度与单位(例如程序提问后我输入 `35.2 C`)。
支持命令行参数:直接在运行命令后传入温度与单位(如 `java TemperatureConverter 86 F`,直接输出,无需程序提问)。
支持批量转换:我先编写了temperatures文件,里面有很多温度,通过 `--batch` 参数读取文本文件进行批量转换。
## 编译命令
在 Windows PowerShell 中,进入代码所在目录后执行:
```powershell
javac TemperatureConverter.java
```

142
TemperatureConverter.java

@ -0,0 +1,142 @@
import java.io.File;
import java.util.Scanner;
public class TemperatureConverter {
/*
* 摄氏度转华氏度
* 参数c 表示摄氏温度
* 返回转换后的华氏温度
*/
public static double celsiusToFahrenheit(double c) {
return c * 9.0 / 5.0 + 32.0;
}
/*
* 华氏度转摄氏度
* 参数f 表示华氏温度
* 返回转换后的摄氏温度
*/
public static double fahrenheitToCelsius(double f) {
return (f - 32.0) * 5.0 / 9.0;
}
/*
* 程序入口
* 参数args 为命令行参数用于选择运行模式
* 1) 无参数交互式输入
* 2) 两个参数命令行模式数值 + 单位
* 3) --batch 文件名批量模式
*/
public static void main(String[] args) {
// 无参数:交互式(从控制台读一行:数值 单位)
if (args.length == 0) {
// 创建控制台输入对象
Scanner sc = new Scanner(System.in);
System.out.print("请输入要转换的温度与单位(例如 36.6 C 或 97 F):");
String input = sc.nextLine().trim();
if (input.isEmpty()) {
System.out.println("输入为空,程序退出。");
sc.close();
return;
}
// 按空格切分:parts[0] 为数值,parts[1]
String[] parts = input.split("\\s+");
try {
// 解析温度数值
double value = Double.parseDouble(parts[0]);
// 没写单位时默认按 C 处理
String unit = parts.length > 1 ? parts[1].toUpperCase() : "C";
if (unit.startsWith("C")) {
double f = celsiusToFahrenheit(value);
// 左边显示用户原始输入,右边保留两位小数
System.out.printf("%s °C = %.2f °F%n", parts[0], f);
} else if (unit.startsWith("F")) {
double c = fahrenheitToCelsius(value);
// 左边显示用户原始输入,右边保留两位小数
System.out.printf("%s °F = %.2f °C%n", parts[0], c);
} else {
// 单位不认识就提示
System.out.println("未知单位,请使用 C 或 F。");
}
} catch (Exception e) {
// 输入不是“数字 + 单位”的格式,或数字解析失败,就给出提示
System.out.println("输入解析失败,请按示例输入数值与单位,例如:36.6 C");
}
sc.close();
return;
}
// --batch 文件名:批量转换(从文件逐行读取,每行:数值 单位)
if (args.length == 2 && args[0].equals("--batch")) {
try {
// 打开文件并逐行读取
Scanner fileSc = new Scanner(new File(args[1]));
int lineNum = 0;
while (fileSc.hasNextLine()) {
lineNum++;
String line = fileSc.nextLine().trim();
// 跳过空行、注释行
if (line.isEmpty() || line.startsWith("#"))
continue;
String[] p = line.split("\\s+");
try {
// 解析每行的温度数值与单位
double val = Double.parseDouble(p[0]);
String u = p.length > 1 ? p[1].toUpperCase() : "C";
if (u.startsWith("C")) {
// 左边显示文件中的原始数值文本,右边保留两位小数
System.out.printf("%s °C = %.2f °F%n", p[0], celsiusToFahrenheit(val));
} else if (u.startsWith("F")) {
// 左边显示文件中的原始数值文本,右边保留两位小数
System.out.printf("%s °F = %.2f °C%n", p[0], fahrenheitToCelsius(val));
} else {
// 单位不对:提示并跳过该行
System.out.println("第" + lineNum + "行单位错误,已跳过");
}
} catch (Exception e) {
// 某一行格式不对:提示并跳过,不影响后续行
System.out.println("第" + lineNum + "行格式错误,已跳过:" + line);
}
}
// 文件读取完成后关闭 Scanner
fileSc.close();
} catch (Exception e) {
// 文件打不开/找不到等情况:提示原因
System.out.println("读取文件失败:" + e.getMessage());
}
return;
}
// 两个参数:命令行模式(直接从 args 读:数值 + 单位)
if (args.length == 2) {
try {
// 解析第一个参数为温度数值
double value = Double.parseDouble(args[0]);
// 第二个参数为单位
String unit = args[1].toUpperCase();
if (unit.startsWith("C")) {
// 左边显示命令行原始参数,右边保留两位小数
System.out.printf("%s °C = %.2f °F%n", args[0], celsiusToFahrenheit(value));
} else if (unit.startsWith("F")) {
// 左边显示命令行原始参数,右边保留两位小数
System.out.printf("%s °F = %.2f °C%n", args[0], fahrenheitToCelsius(value));
} else {
// 单位不认识就提示
System.out.println("未知单位,请使用 C 或 F。");
}
} catch (Exception e) {
// 参数解析失败:给出用法提示
System.out.println("参数格式错误,用法:java TemperatureConverter 36.6 C");
}
return;
}
// 参数不对:输出帮助信息
System.out.println("用法:");
System.out.println(" 交互式:java TemperatureConverter");
System.out.println(" 命令行:java TemperatureConverter 36.6 C");
System.out.println(" 批量: java TemperatureConverter --batch temperatures.txt");
}
}

BIN
ai协助记录.docx

Binary file not shown.
Loading…
Cancel
Save