第三次blog
前言
这次题目集相比与前面几次的题目集的题目都加大了很多,并且相比于前面的题目难度也略有增加,所考察的知识点也更加全面和综合,具体如下:
oopt题目集07
这次题目集仍然是前面几次菜单集的迭代,由于我前面几次菜单做的并不是很理想,所以在做这次题目集仍然成绩并不是非常理想。
所涉及的知识点:类与类之间的关系,类的设计,正则表达式等。
题量大,难度大,知识点会在题目之后总结
oop题目集08
这次题目集是一次新的迭代——课程成绩统计,难度适中,但是由于一开始没有设计好相关的类结构,导致四处碰壁。
所涉及的知识点:类的设计,正则表达式,类与类的关系等;
第七次大作业:
7-1 家居强电电路模拟程序-3
设计建议:
1、电路设备类:描述所有电路设备的公共特征。
2、受控设备类、控制设备类:对应受控、控制设备
3、串联电路类:一条由多个电路设备构成的串联电路,也看成是一个独立的电路设备
4、并联电路类:继承电路设备类,也看成是一个独立的电路设备
其他类以及类的属性、方法自行设计。
家居电路模拟系列1-4题目后续迭代设计:
1)电路结构变化:
迭代1:只有一条线路,所有元件串联
迭代2:线路中包含一个并联电路
迭代3:线路中包含多个串联起来的并联电路
迭代4:并联电路之间可能出现包含关系
电路结构变化示意图见图1。
2)计算方式的变化
迭代1只包含1个受控元件,不用计算电流,之后的电路计算要包含电流、电阻等电路参数。
3)电路元件的变化
每次迭代会增加1-2个新的电路元件。
框架示例:
import java.util.*;
class Main {
public static void main(String[] args) {
// 模拟输入,实际应用中可以从文件或用户输入获取
String[] inputs = {
"#T1:[IN H1-1] [H1-2 D2-1] [D2-2 OUT]",
"#T2:[IN H1-1] [H1-3 D1-1] [D1-2 OUT]",
"#M1:[T1 T2]",
"#T4:[IN K3-1] [K3-2 B2-1] [B2-2 OUT]",
"#T5:[IN K1-1] [K1-2 B1-1] [B1-2 OUT]",
"#M2:[T4 T5]",
"#T3:[VCC K2-1] [K2-2 M1-IN] [M1-OUT M2-IN] [M2-OUT GND]",
"#K1",
"#K2",
"end"
};
// 解析输入并构建电路
Circuit circuit = parseInput(inputs);
if (circuit != null) {
// 模拟电路计算和状态更新
circuit.calculate();
// 输出结果
circuit.outputStatus();
}
}
private static Circuit parseInput(String[] inputs) {
// 这里需要实现输入解析逻辑,构建电路对象
// 包括设备、连接、控制信息等
// 由于篇幅限制,这里不展示完整的解析代码
return new Circuit();
}
}
abstract class Device {
// 设备共有属性和方法
}
class Switch extends Device {
// 开关具体实现
}
class MutualSwitch extends Device {
// 互斥开关具体实现
}
class Dimmer extends Device {
// 调速器具体实现
}
class Light extends Device {
// 灯具具体实现
}
class Fan extends Device {
// 风扇具体实现
}
class Curtain extends Device {
// 窗帘具体实现
}
class Circuit {
// 电路类,包含设备列表和连接信息
void calculate() {
// 这里实现电路计算逻辑
}
void outputStatus() {
// 输出设备状态
for (Device device : devices) {
// 根据设备类型输出不同格式的状态信息
}
}
}
上述代码只是一个框架示例,实际的实现需要根据题目要求详细设计每个类和方法。你需要定义具体的设备类(如开关、互斥开关、调速器、灯具、风扇、窗帘等),并实现电路的解析、计算和输出逻辑。这通常涉及到构建电路图的数据结构、递归或迭代地计算电路状态、以及格式化输出结果。(知识点)
第8次大作业
题目:
7-1 家居强电电路模拟程序-4
题量:大;题目难度:难,知识点:看框架分析
1、电路设备类:描述所有电路设备的公共特征。
2、受控设备类、控制设备类:对应受控、控制设备
3、串联电路类:一条由多个电路设备构成的串联电路,也看成是一个独立的电路设备
4、并联电路类:继承电路设备类,也看成是一个独立的电路设备
其他类以及类的属性、方法自行设计。
5、家居电路模拟系列所有题目的默认规则
1)当计算电压值等数值的过程中,最终结果出现小数时,用截尾规则去掉小数部分,只保留整数部分。为避免精度的误差,所有有可能出现小数的数值用double类型保存并计算,不要作下转型数据类型转换,例如电压、转速、亮度等,只有在最后输出时再把计算结果按截尾规则,舍弃尾数,保留整数输出。
2)所有连接信息按电路从靠电源端到靠接地端的顺序依次输入,不会出现错位的情况。VCC/IN一定是第一个连接的第一项,GND/OUT一定是最后一个连接的后一项。
3)连接信息如果只包含两个引脚,靠电源端的引脚在前,靠接地端的在后。
4)调速器的输入端只会直连VCC,不会接其他设备。整个电路最多只有连接在电源上的一个调速器,且不包含在并联单路中。
5)本系列题目中元件的管脚除了互斥开关的1引脚,其他所有引脚在电路中最多只出现一次。
6、本题新增内容:
1)增加管脚电压的显示
在输出每个电器的状态信息后,再依次输出该电器每个管脚的电压。(格式详见输出信息部分)
2)电流限制
电器在工作时,过大的电流会引起电器过热,从而烧坏电路。本次迭代,每个元器件都有最大电流的设置,当实时电流超过最大电流时,在该电器输出信息的最后加入提示“exceeding current limit error”,与前面的信息之间用英文空格分隔。
基础框架:
import java.util.*;
// 基类,表示电路中的一个设备
abstract class CircuitDevice {
int id;
boolean isActive; // 表示设备是否激活
CircuitDevice(int id) {
this.id = id;
this.isActive = true; // 默认设备是激活的
}
// 计算设备状态的方法,需要在子类中具体实现
abstract void calculateState();
}
// 开关类
class Switch extends CircuitDevice {
Switch(int id) {
super(id);
}
void calculateState() {
// 根据输入来切换开关状态
}
}
// 分档调速器类
class Dimmer extends CircuitDevice {
double level; // 表示调速器的当前级别
Dimmer(int id) {
super(id);
this.level = 0; // 默认级别为0
}
void calculateState() {
// 根据输入调整级别
}
}
// 白炽灯类
class Bulb extends CircuitDevice {
int brightness; // 表示灯泡的亮度
Bulb(int id) {
super(id);
this.brightness = 0; // 默认亮度为0
}
void calculateState() {
// 根据电压差计算亮度
}
}
// 互斥开关类
class MutualSwitch extends CircuitDevice {
int activeBranch; // 表示当前激活的分支
MutualSwitch(int id) {
super(id);
this.activeBranch = 1; // 默认激活第一个分支
}
void calculateState() {
// 根据输入切换激活分支
}
}
// 窗帘类
class Curtain extends CircuitDevice {
double openPercentage; // 表示窗帘打开的百分比
Curtain(int id) {
super(id);
this.openPercentage = 100; // 默认窗帘全开
}
void calculateState() {
// 根据光照强度计算窗帘打开的百分比
}
}
// 电路模拟器类
class CircuitSimulator {
Map<String, CircuitDevice> devices = new HashMap<>();
void simulateCircuit(List<String> inputLines) {
for (String line : inputLines) {
// 解析输入行并更新设备状态
}
// 计算所有设备的状态
for (CircuitDevice device : devices.values()) {
device.calculateState();
}
// 输出所有设备的状态
for (CircuitDevice device : devices.values()) {
System.out.println(device);
}
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
for (CircuitDevice device : devices.values()) {
sb.append(device).append("\n");
}
return sb.toString();
}
}
// 主类
public class HomeAutomationCircuitSimulator {
public static void main(String[] args) {
// 示例输入
List
"#T1:[IN P2-2] [P2-1 H1-2] [H1-1 OUT]",
"#T2:[IN D1-1] [D1-2 H1-3] [H1-1 OUT]",
// ... 更多输入行
"end"
);
CircuitSimulator simulator = new CircuitSimulator();
simulator.simulateCircuit(inputLines);
}
}
这个电路模拟器的基础框架,包括几个设备类和一个模拟器类。每个设备类都有calculateState方法,该方法需要根据具体的业务逻辑来实现。CircuitSimulator类负责解析输入、更新设备状态,并输出结果。
心得:进入了这个学期学习Java的第三个阶段,我们对于Java的体系结构有了进一步的了解。这一阶段的题目集总体来说不难,但对于程序的编写规范来说有许多规定需要遵守,例如程序中的类需要遵守单一原则以及开-闭原则等,特别是对于要写比较多的类的时候保证程序内的单一原则是非常重要的。
改进建议:
1)先是对于我的代里的一些方法的最大圈复杂度很高感到不满意,后期写程序的时候可以考虑自己程序的复杂度然后在进行编写程序。以达到降低圈复杂度的目的,从而来简化自己的程序。
2) 学习到了这个步骤,就应该对于我们写的程序进行更加深入的学习,例如需要对于程序类的结构设计需要有更加好的设计与思路,写程序之前不应该草草的自己开写,是应该对于编写前认真的阅读需求,然后再提出自己的对于程序的思路,对于整个的程序框架需要有一个设计过程或者思考过程。
3)虽然这次的题目集要求的主要是对于我们继承、多态性使用方法以及接口的应用、类的封装性及类间关系设计等要求,但是我认为这次的题目集要求的是我们在于程序重构自己有自己的想法,以及对于程序的设计上有自己的初步的看法。因此还是需要提高自己的的程序设计上的能力。
总结
我认为我们这个专业的学习模式本就是需要自己本身慢慢培养出强大的自学能力,才能够在短时间内提升自己的程序编写能力。其次是对于本阶段的题目,虽然本次题目的题量很小但是对于我们对于程序的规范性下提出要求例如类之间的关系设计,同时也是提高我们学习java的能力。
在通过这个阶段的学习之后我认为我们这只是学习系统的Java的基础,如果需要提高之间仍需不断地努力去了解更多的其他的知识,还有去学习其他人编写的优秀程序。与此同时是要更多的去培养自己的自学能力,以及自己在Java学习过程中要去不断的扩充自己的知识面,从而来提高自己的能力。
我这次课程并没有好好掌握学习机会,如果我过了这科,我一定依然花时间,花更多时间去学Java!!!我真的有点惋惜那几次大作业自己没有抓好,真的很后悔。
标签:题目,第三次,void,id,blog,电路,class,设备
From: https://www.cnblogs.com/YJQK2020/p/18277131