4 changed files with 156 additions and 2 deletions
|
After Width: | Height: | Size: 146 KiB |
@ -1,2 +1,14 @@ |
|||
# java |
|||
|
|||
# TemperatureConverter |
|||
|
|||
将 Python 温度转换程序改写为等效 Java 程序,实现摄氏温度与华氏温度的双向转换。 |
|||
|
|||
## 功能说明 |
|||
支持交互式输入:程序启动后等待用户输入温度与单位(例如程序提问后我输入 `35.2 C`)。 |
|||
支持命令行参数:直接在运行命令后传入温度与单位(如 `java TemperatureConverter 86 F`,直接输出,无需程序提问)。 |
|||
支持批量转换:我先编写了temperatures文件,里面有很多温度,通过 `--batch` 参数读取文本文件进行批量转换。 |
|||
|
|||
## 编译命令 |
|||
在 Windows PowerShell 中,进入代码所在目录后执行: |
|||
```powershell |
|||
javac 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"); |
|||
} |
|||
} |
|||
Binary file not shown.
Loading…
Reference in new issue