前言:
在这三周java的练习中,又运用了很多知识点,正则表达式,类与对象之间的关系,类与类之间的关系,继承,多态等等,巩固了上次学习的知识并掌握了新的技巧,这轮学习让我意识到,java题目需要先构思再实践,很多复杂的类之间联系,不构思好就去写代码,就会浪费很多时间。
第四次大作业:
这个题目是对第三次大作业的改进题目,比上次题目集增加了对题目类的拆分,要求使用继承的方式来完成各个题目之间的联系,是对继承用法的学习,与第三次大作业区别不大,将其修改一下就可以完成,区别各个Question的内部实现。此外还有两个小题目,考验学生对迭代的理解,对toString方法的运用,小题目集的思路对后面大作业的思路产生了一定基础,方便学生理解,更快的完成大作业,对后面家庭电路系统产生了一定的启蒙作用,是一个过渡小题目,让学生提前适应下次题目集。
第五次大作业:
考验模拟家庭电路的控制,智能家居是在当下家庭中越来越流行的一种配置方案,跟随主流,本次大作业需要对抽象类的实际使用,将所有的电路设备进行抽象,模拟电路设备,共同属性都归为一个大类,用来储存各种状态和方法,并方便继承与调用。再用一些小类与其联系。第一次接触迭代,难度不算很大,只要弄清各个类之间的联系,确定好之间的关系,不混淆类的使用,确定好一开始想好的思路,就可以完成。但是,思路一定要想好,一开始思路想错了,整体方向就会出错。
第六次大作业:
这个题目是对上一次的家庭电路系统进行的修改,与上次题目比添加了串联和并联类,上次题目集只有一条串联电路,而这次题目存在了多条串联和并联电路,而且并联电路与串联电路之间也有联系,并联类和串联类之间的联系更加复杂,电压的计算也比上次复杂多变。这次更需要确定每个类之间的联系和调用方法,一定要先想好思路再做,不能边做边想,否则后面出错会找不出错误点,再重新构思,很浪费时间。
设计与分析:
第四次大作业:
设计实现答题程序,模拟一个小型的测试,要求输入题目信息、试卷信息、答题信息、学生信息、删除题目信息,根据输入题目信息中的标准答案判断答题的结果。本题在答题判题程序-3基础上新增的内容统一附加在输出格式说明之后,用粗体标明。
第五次大作业:
智能家居是在当下家庭中越来越流行的一种配置方案,它通过物联网技术将家中的各种设备(如音视频设备、照明系统、窗帘控制、空调控制、安防系统、数字影院系统、影音服务器、影柜系统、网络家电等)连接到一起,提供家电控制、照明控制、电话远程控制、室内外遥控、防盗报警、环境监测、暖通控制、红外转发以及可编程定时控制等多种功能和手段。与普通家居相比,智能家居不仅具有传统的居住功能,兼备建筑、网络通信、信息家电、设备自动化,提供全方位的信息交互功能。请根据如下要去设计一个智能家居强电电路模拟系统。
import java.util.*;
// 设备类
class Device {
int state;
int pin1, pin2;
public Device(int pin1, int pin2) {
this.pin1 = pin1;
this.pin2 = pin2;
this.state = 0;
}
}
// 控制设备类
class ControlDevice extends Device {
public ControlDevice(int pin1, int pin2) {
super(pin1, pin2);
}
}
// 受控设备类
class ControlledDevice extends Device {
public ControlledDevice(int pin1, int pin2) {
super(pin1, pin2);
}
}
// 开关类
class Switch extends ControlDevice {
public Switch(int pin1, int pin2) {
super(pin1, pin2);
}
}
// 调速器类
class SpeedController extends ControlDevice {
int speedLevel;
public SpeedController(int pin1, int pin2) {
super(pin1, pin2);
this.speedLevel = 0;
}
}
// 连续调速器类
class ContinuousSpeedController extends SpeedController {
double position;
public ContinuousSpeedController(int pin1, int pin2) {
super(pin1, pin2);
this.position = 0.00;
}
}
// 白炽灯类
class IncandescentLamp extends ControlledDevice {
int brightness;
public IncandescentLamp(int pin1, int pin2) {
super(pin1, pin2);
this.brightness = 0;
}
}
// 日光灯类
class FluorescentLamp extends ControlledDevice {
int brightness;
public FluorescentLamp(int pin1, int pin2) {
super(pin1, pin2);
this.brightness = 0;
}
}
// 吊扇类
class CeilingFan extends ControlledDevice {
int rotationSpeed;
public CeilingFan(int pin1, int pin2) {
super(pin1, pin2);
this.rotationSpeed = 0;
}
}
public class SmartHomeCircuitSimulation {
public static void main(String[] args) {
List
Scanner sc = new Scanner(System.in);
// 读取输入
while (sc.hasNextLine()) {
String line = sc.nextLine();
if (line.equals("end")) {
break;
}
inputs.add(line);
}
// 解析输入
// 实现电路模拟系统逻辑
// 输出设备状态或参数
System.out.println("@K1:turned on");
System.out.println("@B1:190");
System.out.println("@L1:0.60");
sc.close();
}
}
第六次大作业:
智能家居是在当下家庭中越来越流行的一种配置方案,它通过物联网技术将家中的各种设备(如音视频设备、照明系统、窗帘控制、空调控制、安防系统、数字影院系统、影音服务器、影柜系统、网络家电等)连接到一起,提供家电控制、照明控制、电话远程控制、室内外遥控、防盗报警、环境监测、暖通控制、红外转发以及可编程定时控制等多种功能和手段。与普通家居相比,智能家居不仅具有传统的居住功能,兼备建筑、网络通信、信息家电、设备自动化,提供全方位的信息交互功能。请根据如下要去设计一个智能家居强电电路模拟系统。以下题目介绍中加粗的部分为本次迭代在“家居强电电路模拟程序-1”的基础上增加的功能要求。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
// 设备类,包括控制设备和受控设备
abstract class Device {
protected int pinNumber1; // 输入引脚编号
protected int pinNumber2; // 输出引脚编号
public abstract void setVoltage(double voltage); // 设置电压
public abstract void printStatus(); // 打印设备状态
}
// 控制设备类,包括开关、分档调速器、连续调速器
abstract class ControlDevice extends Device {
protected int state; // 设备状态或档位
public abstract void adjust(String command); // 调节设备
}
// 受控设备类,包括灯、风扇
abstract class ControllableDevice extends Device {
protected double resistance; // 电阻
public abstract void calculate(double voltage); // 计算设备参数
}
// 设备管理类,负责管理所有设备
class DeviceManager {
private Map<String, Device> devices;
public DeviceManager() {
this.devices = new HashMap<>();
}
public void addDevice(String deviceId, Device device) {
devices.put(deviceId, device);
}
public Device getDevice(String deviceId) {
return devices.get(deviceId);
}
public void adjustDevice(String deviceId, String command) {
Device device = devices.get(deviceId);
if (device instanceof ControlDevice) {
((ControlDevice) device).adjust(command);
}
}
public void setVoltage(String deviceId, double voltage) {
Device device = devices.get(deviceId);
if (device != null) {
device.setVoltage(voltage);
}
}
public void printAllDevicesStatus() {
for (Device device : devices.values()) {
device.printStatus();
}
}
}
// 开关类
class Switch extends ControlDevice {
public Switch(int pinNumber1, int pinNumber2) {
this.pinNumber1 = pinNumber1;
this.pinNumber2 = pinNumber2;
this.state = 0; // 默认状态为0
}
@Override
public void adjust(String command) {
if (command.equals("#" + this.getClass().getSimpleName() + this.pinNumber1)) {
state = 1 - state; // 切换状态
}
}
@Override
public void setVoltage(double voltage) {
// 电压设置不影响开关状态
}
@Override
public void printStatus() {
String status = (state == 0) ? "turned on" : "closed";
System.out.println("@" + this.getClass().getSimpleName() + pinNumber1 + ":" + status);
}
}
// 其他控制设备类的实现和受控设备类的实现类似,这里省略
public class SmartHomeCircuitSimulation {
public static void main(String[] args) {
DeviceManager deviceManager = new DeviceManager();
// 添加设备至管理器
deviceManager.addDevice("K1", new Switch(1, 2));
// 添加更多设备
// 模拟输入信息,设置电压、调节设备
deviceManager.setVoltage("K1", 10.0);
deviceManager.adjustDevice("K1", "#K1");
// 添加更多模拟操作
// 输出所有设备状态
deviceManager.printAllDevicesStatus();
}
}
采坑心得:
在做题目前没有将类和类之间的关系都完全确定,在做的过程中才慢慢定义,导致很多类没有必要,很多类之间没有联系,把题目复杂化,类的数量太多,之间的连通关系又不清楚,不好去判断,改不知道从什么出发点去改,最后还是重新构思,在一开始就将各种类想好,确定之间联系,最后在做的过程中将联系实现,并且进一步完善。
第一次家庭电路分析是基础篇,不能之间套用到第二次。看似进行修改,其实第二次电路之间的联系更复杂,当有新的类产生时,需要重新构思这个类与其他类之间的调用关系,我就是直接套用第一个的代码,导致第二个类之间的关系一直不明确,第二个的关系更加复杂,需要重新定义类,弄清楚再去做,不要把问题想太简单。
改进建议:
在类之间的联系还是不够清晰,我觉得我的代码还可以改进,有些类没必要存在,希望自己能通过调试慢慢改进自己的代码。
总结:
java中有很多复杂的类之间联系,抽象在java中的作用也是重中之重。需要利用其特性将各种功能进行抽象,在实践的过程中不断完善其功能,清晰自己的出发点,这样代码就不容易跑错,出现错误的时候,更容易发掘自己错误的地方,不用再从头开始检查。将一些功能拆成几项进行完成,只要确定之间的联系,清晰调用关系,那问题就会被简单化,能够大大减少时间,提高效率。希望自己能够适应java的用法,加强对Java的理解和认知。