21 changed files with 362 additions and 2 deletions
Binary file not shown.
Binary file not shown.
@ -0,0 +1,3 @@ |
|||||
|
- 协助完成 Java 代码结构设计,实现摄氏度/华氏度转换核心算法,并补充完整中文注释。 |
||||
|
- 提供命令行参数处理方案,支持 `java TemperatureConverter 36.6 C` 格式的直接调用。 |
||||
|
- 生成 README.md 模板,包含编译/运行命令、输出示例及作业提交说明。 |
||||
@ -0,0 +1,10 @@ |
|||||
|
public class Helloworld {/** |
||||
|
* 简单 HelloWorld 程序,用于验证 Java 环境 |
||||
|
* @author [你的姓名] |
||||
|
*/ |
||||
|
public class HelloWorld { |
||||
|
public static void main(String[] args) { |
||||
|
System.out.println("Hello, Java World!"); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,2 @@ |
|||||
|
$ java TemperatureConverter 36.6 C |
||||
|
命令行转换: 36.6 ℃ = 97.88 ℉ |
||||
@ -0,0 +1,59 @@ |
|||||
|
/** |
||||
|
* 温度转换工具类 |
||||
|
* 实现摄氏度与华氏度的双向转换,并提供测试用例 |
||||
|
* @author [你的姓名] |
||||
|
* @version 1.0 |
||||
|
*/ |
||||
|
public class TemperatureConverter { |
||||
|
|
||||
|
/** |
||||
|
* 摄氏度转华氏度 |
||||
|
* 公式: F = C × 9/5 + 32 |
||||
|
* @param celsius 摄氏温度值 |
||||
|
* @return 对应的华氏温度值 |
||||
|
*/ |
||||
|
public static double celsiusToFahrenheit(double celsius) { |
||||
|
return celsius * 9.0 / 5.0 + 32.0; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 华氏度转摄氏度 |
||||
|
* 公式: C = (F - 32) × 5/9 |
||||
|
* @param fahrenheit 华氏温度值 |
||||
|
* @return 对应的摄氏温度值 |
||||
|
*/ |
||||
|
public static double fahrenheitToCelsius(double fahrenheit) { |
||||
|
return (fahrenheit - 32.0) * 5.0 / 9.0; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 主方法:程序入口,包含测试用例 |
||||
|
* @param args 命令行参数(可选,支持直接传入温度值和单位进行转换) |
||||
|
*/ |
||||
|
public static void main(String[] args) { |
||||
|
// 示例测试用例
|
||||
|
double testC = 25.0; |
||||
|
double testF = 77.0; |
||||
|
|
||||
|
System.out.println("=== 温度转换测试 ==="); |
||||
|
System.out.printf("%.1f ℃ 转换为华氏度: %.1f ℉%n", testC, celsiusToFahrenheit(testC)); |
||||
|
System.out.printf("%.1f ℉ 转换为摄氏度: %.1f ℃%n", testF, fahrenheitToCelsius(testF)); |
||||
|
|
||||
|
// 支持命令行参数模式(加分项)
|
||||
|
if (args.length == 2) { |
||||
|
try { |
||||
|
double temp = Double.parseDouble(args[0]); |
||||
|
String unit = args[1].toUpperCase(); |
||||
|
if (unit.equals("C")) { |
||||
|
System.out.printf("命令行转换: %.1f ℃ = %.1f ℉%n", temp, celsiusToFahrenheit(temp)); |
||||
|
} else if (unit.equals("F")) { |
||||
|
System.out.printf("命令行转换: %.1f ℉ = %.1f ℃%n", temp, fahrenheitToCelsius(temp)); |
||||
|
} else { |
||||
|
System.out.println("单位错误,请使用 C 或 F"); |
||||
|
} |
||||
|
} catch (NumberFormatException e) { |
||||
|
System.out.println("温度值格式错误,请输入数字"); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -1,2 +0,0 @@ |
|||||
public class sss { |
|
||||
} |
|
||||
@ -0,0 +1,35 @@ |
|||||
|
public class DataCleaner {public static void main(String[] args) { |
||||
|
int[] sensorData = {85, -5, 92, 0, 105, 999, 88, 76}; |
||||
|
|
||||
|
int validSum = 0; // 有效数据总和
|
||||
|
int validCount = 0; // 有效数据个数
|
||||
|
|
||||
|
// 遍历数组,处理每一个数据
|
||||
|
for (int data : sensorData) { |
||||
|
// 3. 致命错误:遇到 999,终止整个流程
|
||||
|
if (data == 999) { |
||||
|
System.out.println("致命错误: 传感器掉线, 终止处理。"); |
||||
|
break; |
||||
|
} |
||||
|
|
||||
|
// 2. 无效数据:0/负数 或 >100 且不是999
|
||||
|
if (data <= 0 || data > 100) { |
||||
|
System.out.printf("警告: 发现越界数据[%d], 已跳过。%n", data); |
||||
|
continue; |
||||
|
} |
||||
|
|
||||
|
// 1. 正常范围:1~100(包含),计入统计
|
||||
|
validSum += data; |
||||
|
validCount++; |
||||
|
} |
||||
|
|
||||
|
// 4. 最终输出:计算并打印平均值
|
||||
|
if (validCount > 0) { |
||||
|
// 注意整数除法陷阱,转成 double 计算
|
||||
|
double average = (double) validSum / validCount; |
||||
|
System.out.printf("有效数据平均值: %.2f%n", average); |
||||
|
} else { |
||||
|
System.out.println("无有效数据。"); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,5 @@ |
|||||
|
警告: 发现越界数据[-5], 已跳过。 |
||||
|
警告: 发现越界数据[0], 已跳过。 |
||||
|
警告: 发现越界数据[105], 已跳过。 |
||||
|
致命错误: 传感器掉线, 终止处理。 |
||||
|
有效数据平均值: 88.50 |
||||
@ -0,0 +1,117 @@ |
|||||
|
|
||||
|
public class Car { |
||||
|
// 1. 私有属性
|
||||
|
private final String licensePlate; // 车牌号(不可变)
|
||||
|
private String brand; // 品牌
|
||||
|
private String model; // 型号
|
||||
|
private double dailyRent; // 日租金
|
||||
|
private boolean isRented; // 是否已出租
|
||||
|
|
||||
|
// 静态成员(加分项):统计车辆总数
|
||||
|
private static int totalCars = 0; |
||||
|
|
||||
|
// 2. 全参构造方法
|
||||
|
public Car(String licensePlate, String brand, String model, double dailyRent) { |
||||
|
this.licensePlate = licensePlate; |
||||
|
this.brand = brand; |
||||
|
this.model = model; |
||||
|
this.dailyRent = dailyRent; |
||||
|
this.isRented = false; // 初始状态:未出租
|
||||
|
totalCars++; // 每创建一个对象,总数+1
|
||||
|
} |
||||
|
|
||||
|
// 重载构造方法:只接收车牌号、品牌、型号,日租金默认300
|
||||
|
public Car(String licensePlate, String brand, String model) { |
||||
|
this(licensePlate, brand, model, 300.0); // 调用全参构造
|
||||
|
} |
||||
|
|
||||
|
// 3. Getter/Setter 方法
|
||||
|
public String getLicensePlate() { |
||||
|
return licensePlate; |
||||
|
} |
||||
|
// 无setLicensePlate,保证车牌号不可修改
|
||||
|
|
||||
|
public String getBrand() { |
||||
|
return brand; |
||||
|
} |
||||
|
|
||||
|
public void setBrand(String brand) { |
||||
|
this.brand = brand; |
||||
|
} |
||||
|
|
||||
|
public String getModel() { |
||||
|
return model; |
||||
|
} |
||||
|
|
||||
|
public void setModel(String model) { |
||||
|
this.model = model; |
||||
|
} |
||||
|
|
||||
|
public double getDailyRent() { |
||||
|
return dailyRent; |
||||
|
} |
||||
|
|
||||
|
public void setDailyRent(double dailyRent) { |
||||
|
// 数据校验:新租金必须大于0
|
||||
|
if (dailyRent > 0) { |
||||
|
this.dailyRent = dailyRent; |
||||
|
} else { |
||||
|
System.out.println("错误:日租金必须大于0,修改无效。"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public boolean isRented() { |
||||
|
return isRented; |
||||
|
} |
||||
|
// 无setIsRented,状态必须通过业务方法改变
|
||||
|
|
||||
|
// 静态方法:获取总车辆数
|
||||
|
public static int getTotalCars() { |
||||
|
return totalCars; |
||||
|
} |
||||
|
|
||||
|
// 4. 业务方法
|
||||
|
/** |
||||
|
* 租车:将车辆状态置为已出租 |
||||
|
*/ |
||||
|
public void rentCar() { |
||||
|
if (isRented) { |
||||
|
System.out.println("车辆已租出,无法再次租用。"); |
||||
|
} else { |
||||
|
isRented = true; |
||||
|
System.out.println("租车成功:" + licensePlate); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 还车:将车辆状态置为未出租 |
||||
|
*/ |
||||
|
public void returnCar() { |
||||
|
if (!isRented) { |
||||
|
System.out.println("车辆未被租用,无需归还。"); |
||||
|
} else { |
||||
|
isRented = false; |
||||
|
System.out.println("还车成功:" + licensePlate); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 计算总租金 |
||||
|
* @param days 租用天数(假设>0,不做校验) |
||||
|
* @return 总租金 |
||||
|
*/ |
||||
|
public double calculateRent(int days) { |
||||
|
return dailyRent * days; |
||||
|
} |
||||
|
|
||||
|
// 辅助方法:显示车辆信息
|
||||
|
public void displayInfo() { |
||||
|
System.out.println("=== 车辆信息 ==="); |
||||
|
System.out.println("车牌号:" + licensePlate); |
||||
|
System.out.println("品牌:" + brand); |
||||
|
System.out.println("型号:" + model); |
||||
|
System.out.println("日租金:" + dailyRent + "元/天"); |
||||
|
System.out.println("状态:" + (isRented ? "已出租" : "可租")); |
||||
|
System.out.println(); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,34 @@ |
|||||
|
public class Testcar { public static void main(String[] args) { |
||||
|
// 1. 创建3个Car对象(使用不同构造方法)
|
||||
|
Car car1 = new Car("京A12345", "丰田", "凯美瑞", 280.0); |
||||
|
Car car2 = new Car("沪B67890", "本田", "雅阁"); // 默认日租金300
|
||||
|
Car car3 = new Car("粤C24680", "大众", "帕萨特", 320.0); |
||||
|
|
||||
|
// 2. 输出所有车辆信息
|
||||
|
System.out.println("===== 初始车辆信息 ====="); |
||||
|
car1.displayInfo(); |
||||
|
car2.displayInfo(); |
||||
|
car3.displayInfo(); |
||||
|
|
||||
|
// 3. 测试租车/还车业务
|
||||
|
System.out.println("===== 测试租车/还车 ====="); |
||||
|
car1.rentCar(); // 正常租车
|
||||
|
car1.rentCar(); // 重复租车(提示错误)
|
||||
|
car1.returnCar(); // 正常还车
|
||||
|
car1.returnCar(); // 重复还车(提示错误)
|
||||
|
|
||||
|
// 4. 计算租金(5天)
|
||||
|
System.out.println("===== 计算租金 ====="); |
||||
|
double rent = car1.calculateRent(5); |
||||
|
System.out.printf("京A12345 租用5天,总租金:%.2f元%n%n", rent); |
||||
|
|
||||
|
// 5. 测试非法日租金修改
|
||||
|
System.out.println("===== 测试非法租金修改 ====="); |
||||
|
car1.setDailyRent(-100); // 输入非法值,提示错误
|
||||
|
System.out.println("修改后日租金:" + car1.getDailyRent() + "元/天(保持原值)%n"); |
||||
|
|
||||
|
// 6. 输出总车辆数(静态成员)
|
||||
|
System.out.println("===== 车辆总数 ====="); |
||||
|
System.out.println("当前系统共有车辆:" + Car.getTotalCars() + "辆"); |
||||
|
} |
||||
|
} |
||||
Binary file not shown.
|
After Width: | Height: | Size: 347 KiB |
|
After Width: | Height: | Size: 347 KiB |
@ -0,0 +1,5 @@ |
|||||
|
AI 协助明确本次 Java 编程任务核心要求,即通过抽象类、继承与多态实现图形面积统一计算与输出。 |
||||
|
AI 提供完整可运行代码,包括抽象类Shape、Circle/Rectangle/Triangle子类、工具类ShapeUtil及测试类,规范代码结构。 |
||||
|
AI 补充空值判断、格式化输出等细节,提升代码健壮性与可读性。 |
||||
|
AI 协助生成实验报告框架、类图、组合与继承对比分析内容。 |
||||
|
AI 对面向对象相关知识点进行讲解,帮助理解多态、继承等核心原理。 |
||||
@ -0,0 +1,13 @@ |
|||||
|
public class Main { |
||||
|
public static void main(String[] args) { |
||||
|
// 创建图形对象
|
||||
|
Shape circle = new Circle(6); |
||||
|
Shape rectangle = new Rectangle(7, 9); |
||||
|
Shape triangle = new Triangle(7, 10); |
||||
|
|
||||
|
// 统一计算并打印面积
|
||||
|
ShapeUtil.printArea(circle); |
||||
|
ShapeUtil.printArea(rectangle); |
||||
|
ShapeUtil.printArea(triangle); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,61 @@ |
|||||
|
|
||||
|
abstract class Shape {//定义一个抽象类
|
||||
|
public abstract double getArea();//强制所有图形都必须能计算面积
|
||||
|
} |
||||
|
|
||||
|
// 圆形
|
||||
|
class Circle extends Shape {//继承shape,必须实现getarea
|
||||
|
private double radius;//半径私有属性
|
||||
|
|
||||
|
public Circle(double radius) { |
||||
|
this.radius = radius; |
||||
|
}//构造方法无返回值,给对象赋初始值
|
||||
|
|
||||
|
@Override//重写父类方法
|
||||
|
public double getArea() { |
||||
|
return Math.PI * radius * radius; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 矩形
|
||||
|
class Rectangle extends Shape { |
||||
|
private double length; |
||||
|
private double width; |
||||
|
|
||||
|
public Rectangle(double length, double width) { |
||||
|
this.length = length; |
||||
|
this.width = width; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public double getArea() { |
||||
|
return length * width; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 三角形
|
||||
|
class Triangle extends Shape { |
||||
|
private double base; |
||||
|
private double height; |
||||
|
|
||||
|
public Triangle(double base, double height) { |
||||
|
this.base = base; |
||||
|
this.height = height; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public double getArea() { |
||||
|
return 0.5 * base * height; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 工具类
|
||||
|
class ShapeUtil {//专门用来打印图形面积
|
||||
|
public static void printArea(Shape shape) {//任意接受一个图形
|
||||
|
System.out.println("图形面积:" + shape.getArea()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
After Width: | Height: | Size: 340 KiB |
|
After Width: | Height: | Size: 56 KiB |
@ -0,0 +1,18 @@ |
|||||
|
继承(本次实验使用方式) |
||||
|
优点: |
||||
|
代码复用:子类自动继承父类的抽象方法约束,统一接口。 |
||||
|
多态支持:父类引用指向子类对象,实现统一处理(如 ShapeUtil.printArea)。 |
||||
|
结构清晰:符合 “is-a” 关系(圆形是一种图形、矩形是一种图形)。 |
||||
|
缺点: |
||||
|
耦合度高:子类与父类强绑定,父类修改会影响所有子类。 |
||||
|
无法多继承:Java 中一个类只能继承一个父类,扩展性受限。 |
||||
|
破坏封装:子类可能过度依赖父类的内部实现。 |
||||
|
2. 组合 |
||||
|
定义:通过 “包含” 其他类的实例来实现功能,符合 “has-a” 关系(如图形包含颜色、位置等属性类)。 |
||||
|
优点: |
||||
|
低耦合:类之间通过接口交互,修改内部实现不影响调用方。 |
||||
|
灵活性高:可动态组合多个对象,实现更复杂的功能。 |
||||
|
符合 “合成复用原则”:优先使用组合而非继承。 |
||||
|
缺点: |
||||
|
代码量稍多:需要手动创建对象引用并委托调用。 |
||||
|
不直接支持多态的 “is-a” 语义表达。 |
||||
Loading…
Reference in new issue