首页 > 其他分享 >第三次blog

第三次blog

时间:2024-06-30 20:08:57浏览次数:14  
标签:第三次 重写 blog circuitEquipments voltage 构造函数 方法 设备

一.前言
1.题目集7~8的知识点:
(1)类与对象:各个电路设备类型被建模为类,每个类封装了设备的状态和行为。
(2)继承与多态:使用继承来建立设备类之间的关系,并通过方法重写实现多态性,确保同一方法针对不同类型的设备表现出不同行为。
(3)接口与排序:接口被用于定义设备类的排序规则,确保设备对象可以按照特定的属性进行比较和排序。
(4)封装与访问控制:使用封装技术保护设备类的内部状态,通过公共方法提供对设备状态和行为的控制和访问。
(5)构造函数:每个设备类都包含构造函数,用于初始化设备对象的初始状态和属性。
(6)递归:串联电路包含所有电器设备子类,运用递归的方法计算每个设备的电压以及电流情况。
(7)正则表达式:运用正则表达式对输入文本进行匹配,以精准地读出输入设备的属性。
(8)异常情况的处理:通过将题目输入的大块字符串分割成一段一段的字符串进行逐个处理,并对异常情况进行输出,保证程序的稳定性。
2.题量
(1)在第七次大作业中,有大量的设计需要完成,因此需要投入相当多的时间和精力。
(3)而在第八次大作业中,设计虽然也很多,但与第七次相比,它需要更多的时间来完成整个作业,因为其中的每个知识点都更加复杂,需要更深入的思考和分析。
3.难度
(1)第七次大作业的难度:较高。由于有大量的设计需要完成,并且需要花费大量的时间和精力,因此这个作业的难度较高。
(3)第八次大作业的难度:高。设计思路也很多,难度比第七次大作业难,需要投入大量的时间和精力来完成。
二.设计与分析
1.第七次大作业
(1)设计与分析


CircuitEquipment 类:
属性包括设备编号 deviceNumber、设备类型 deviceType、两个引脚 pin1 和 pin2、使用状态 useState 和电压 voltage。
实现了 Comparable 接口,通过 compareTo 方法按照设备类型和设备编号进行比较。
提供了构造函数和一些基本的 getter 和 setter 方法。
包含了一个抽象方法 endVoltage,用于计算设备终端的电压。
包含了一个 display 方法用于显示设备信息,以及一个 usable 方法用于判断设备是否可用。
Switch 类:
继承自 CircuitEquipment 类,表示开关设备。
属性包括开关状态 state。
构造函数初始化开关状态,并设置设备类型。
重写了 endVoltage 方法,根据开关状态返回电压值。
实现了 setState 方法用于改变开关状态。
重写了 display 方法用于显示开关状态。
BinningGovernor 类:
继承自 CircuitEquipment 类,表示分档调速器设备。
属性包括档位 binningGears。
构造函数初始化档位,并设置设备类型。
重写了 usable 方法,根据引脚连接情况判断设备是否可用。
重写了 endVoltage 方法,根据档位和可用性返回电压值。
实现了 shiftUp 和 shiftDown 方法用于调节档位。
重写了 display 方法用于显示档位信息。
ContinuousGovernor 类:
继承自 CircuitEquipment 类,表示连续调速器设备。
属性包括连续档位 continuousGears。
构造函数初始化连续档位,并设置设备类型。
重写了 usable 方法,根据引脚连接情况判断设备是否可用。
重写了 endVoltage 方法,根据连续档位和可用性返回电压值。
重写了 display 方法用于显示连续档位信息。
IncandescentLamp 类:
继承自 CircuitEquipment 类,表示白炽灯设备。
属性包括白炽灯亮度 incandescentLampBrightness。
构造函数初始化白炽灯类型。
重写了 endVoltage 方法,根据电压计算白炽灯的亮度。
重写了 display 方法用于显示白炽灯亮度。
FluorescentLamp 类:
继承自 CircuitEquipment 类,表示日光灯设备。
属性包括日光灯亮度 fluorescentLampBrightness。
构造函数初始化日光灯类型。
重写了 endVoltage 方法,根据电压计算日光灯的亮度。
重写了 display 方法用于显示日光灯亮度。
CeilingFan 类:
继承自 CircuitEquipment 类,表示吊扇设备。
属性包括吊扇转速 rotateSpeed。
构造函数初始化吊扇类型。
重写了 endVoltage 方法,根据电压计算吊扇的转速。
重写了 display 方法用于显示吊扇转速。
SeriesCircuits 类:
用于管理一组电路设备的集合。
属性包括 circuitEquipments,存储 CircuitEquipment 对象的 ArrayList。
构造函数初始化 circuitEquipments。
实现了 displayAll 方法用于显示所有电路设备的信息。
实现了 setVoltage 方法用于设置电路中的电压,并根据电压计算每个设备的状态。
ParallelCircuit 类:
代表并联电路。
属性包括一个存储 SeriesCircuits 对象的列表 seriesCircuits。
构造函数接受设备数量,初始化 seriesCircuits 列表。
重写了 getResistance 方法来计算并联电路的总电阻。
包括 getCircuitEquipments 方法来获取并联电路中的设备列表。
(2)心得
优化了上次迭代过程中写的循环语句,在判断设备读入结束时添加了break,将部分for循环改为了for-each循环简化了过程中的变量。

第一次提交错了部分,根据提示查看代码发现是本次迭代新加入了串联电路包含串联电路,而在串联电路类中添加设备时没考虑添加串联电路,并且在检查时发现没有处理互斥开关只有一个的情况,新加入了循环遍历动态数组将有关互斥开关的部分修改,单独列出互斥开关只出现一次时的情况,与互斥开关出现两次的情况区分开,最后还是只有91分,27、28、29测试点怎么都过不了,最终询问同学不断测试各种奇怪的输入发现错在输出排序,我将设备编号的数据类型设为int,在调取comparable接口时对同种设备的输出按照编号的数字大小输出,而实际却应该将编号设为String类型,按照字典序输出各个设备。
2.第八次大作业
(1)设计与分析


这次大作业在第七次的基础上修改了SeriesCircuits类、ParallelCircuit类和主函数,以及按照题目要求增加了二极管类。
构造函数初始化了 Diode 类的实例。它调用了父类 CircuitEquipment 的构造函数,传递设备编号 deviceNumber。
使用 setDeviceType(10) 设置设备类型为 10,是二极管的特定类型。
调用 setResistance(0) 将电阻设为 0,表示这个二极管模型在这里忽略了电阻的影响。
方法重写 (display() 方法):
@Override 标注表明 display() 方法重写了父类 CircuitEquipment 的 display() 方法。
System.out.print("@P"+getDeviceNumber()+":")输出设备编号前缀,格式为 @P 加上设备编号。
检查 getVoltage1() 和 getVoltage2(),如果它们相等且都为 0,则打印 "cutoff";如果不为 0,则打印 "conduction"。
如果 getVoltage1() 和 getVoltage2() 不相等,则再次检查 usable() 方法的返回值,如果可用,则打印 "conduction",否则打印 "cutoff"。
输出电压范围,格式为 (voltage1-voltage2)。
最后,根据当前电流是否大于 8,决定是否输出 "exceeding current limit error"。
其中串联电路类的setResult方法修改最大如下:
@Override
public void setResult(double voltage)
{
this.voltage=getVoltage1();
if(circuitEquipments.get(0).getDeviceType()2||circuitEquipments.get(0).getDeviceType()3)
{
voltage = circuitEquipments.get(0).endVoltage(220);
this.voltage=voltage;
}
double totalResistance = calculateTotalResistance();
double current=voltage/totalResistance;
if(!seriesCircuitsState())
current=0;
if(currentDouble.POSITIVE_INFINITY)
setCurrent(0);
else if (totalResistance
0&&voltage0)
setCurrent(getCurrent());
else
setCurrent(current);
if(!seriesCircuitsState())
{
boolean opening=false;
for (CircuitEquipment circuitEquipment1 : circuitEquipments)
{
if(circuitEquipment1
circuitBreaker())
opening=true;
circuitEquipment1.setResult(0);
if(!opening)
{
circuitEquipment1.setVoltage1(this.voltage);
circuitEquipment1.setVoltage2(this.voltage);
}
else
{
circuitEquipment1.setVoltage1(getVoltage2());
circuitEquipment1.setVoltage2(getVoltage2());
}
}
if(circuitBreaker().usable())
circuitBreaker().setVoltage1(this.voltage);
else
circuitBreaker().setVoltage2(this.voltage);
circuitEquipments.get(circuitEquipments.size()-1).setVoltage2(this.voltage-voltage);
circuitBreaker().setResult(voltage-circuitBreaker().getVoltage2());
return;
}
for (CircuitEquipment circuitEquipment : circuitEquipments)
{
double deviceVoltage = voltage * circuitEquipment.getResistance() / totalResistance;
if(totalResistance0)
deviceVoltage=0;
if (circuitEquipment.usable())
{
circuitEquipment.setVoltage1(this.voltage);
circuitEquipment.setVoltage2(this.voltage - deviceVoltage);
}
else
{
circuitEquipment.setVoltage1(this.voltage - deviceVoltage);
circuitEquipment.setVoltage2(this.voltage);
}
circuitEquipment.setResult(deviceVoltage);
this.voltage-=deviceVoltage;
}
if(circuitEquipments.get(0).getDeviceType()
2||circuitEquipments.get(0).getDeviceType()==3)
{
if (circuitEquipments.get(0).usable())
circuitEquipments.get(0).setVoltage1(220);
else
circuitEquipments.get(0).setVoltage2(220);
}
double brightness=getTotalBrightness();
for(CircuitEquipment circuitEquipment:getAllDevice())
if(circuitEquipment instanceof Curtain)
((Curtain) circuitEquipment).setOpenScale(brightness);
}
在这个方法中根据当前串联电路的通路情况以及各个设备引脚的接通情况设置了非常多的if条件判断,导致整段代码非常累赘,但是受限于时间,没有想到更好的办法优化这个方法,使得在后面修改的过程中越来越复杂,以至于完全不知道从何下手
(2)心得
这次大作业发布时临近各科期末考试,导致大部分时间花在考试上,只用了很短的时间去迭代代码,最终在最后一天晚上写到十二点才得了72分。这次大作业本身就比之前的更加有挑战性,但我却花了更少的时间去写,问题还是在于思路不够清晰,在设计串联电路类中的方法时没有很好的逻辑性,以后在写编程作业时必须花更多的精力以达到更好的效果。
三.总结
通过完成这两次大作业,我深入理解了面向对象编程的核心概念。我掌握了类、对象、封装等基本概念,并学会了如何在实际编程中应用它们。这些作业不仅帮助我掌握了编程语言的语法和特性,还提升了我的实际编程能力和解决问题的技巧。在处理作业和实验时,我学会了如何提高代码的复用性和可维护性,例如将功能封装成方法或类,并注重代码的可读性和注释,以便于团队协作和未来的维护。在这次编程作业中,我还系统地学习了正则表达式的应用。正则表达式是一种强大的文本处理工具,我学会了如何使用它来搜索、提取和替换特定模式的字符串,以及验证输入的格式。这种技能使我能够更高效地处理文本数据,提升了我的编程实践能力和解决问题的灵活性。我通过深入学习继承的概念和实际应用,进一步扩展了我的编程知识。我学会了如何创建和使用子类来扩展和重用代码功能,从而使我的代码更加模块化和可扩展。这种方法不仅减少了重复编码的工作量,还使代码更易于维护和升级。在未来,我将继续运用继承原理,设计和实现更加灵活和可维护的代码结构,以应对各种复杂项目的需求和挑战。在今后的学习中可以将相似的功能封装成方法或者类,可以提高代码的复用性和可维护性。以后在实现代码的过程中可以适当加入一些注释,代码应该易于理解,包括给变量和方法起一个有意义的名字,添加注释来解释代码的作用和逻辑。这样可以让其他人更容易理解代码,也方便自己日后的维护和修改。

标签:第三次,重写,blog,circuitEquipments,voltage,构造函数,方法,设备
From: https://www.cnblogs.com/a2320122/p/18276876

相关文章

  • 23201826-熊锋-第三次blog
    一.前言这两次pta作业第一次为家居强电电路模拟程序-3,这次题型,是在家居强电电路模拟程序-2的基础上进行迭代,虽然仅仅只增加了互斥开关等,但带来的改变同上一次十分巨大,通路的判断不再仅仅局限于各个控制设备0与1,而是要判断多个控制设备的开闭,其位置乃至互斥开关的实际情况,使得并联......
  • 第三次blog
    1.前言一、知识点关于类1:类似于C语言的结构体,但比C语言中的结构体作用更多,且适用范围更广2:懂得封装和公开的区别,即private和public的区别,用private可以防止数据的泄露3:用类把题目分解,以便更好的解决题目,创立多个类,来分解题目。4:在Java开发中,类是实现功能的基础。通过定义类,......
  • 第三次Blog
    (1) 前言:第七次大作业与第八次大作业知识点要是继承与多态并且对类方法的运用,题量比较大,难度也是不断上升。第七次大作业在第六次大作业基础上增加了受控窗帘这一受控设备与互斥开关这一控制开关,并考虑了一条总电路上有多个并联电路,输入信息也变得与第六次大作业不一样,但输出信息大......
  • 23201115-邓俊豪-第三次blog
    目录blog2前言关于难度和题目量关于知识点设计与分析pta-7一、项目简介二、项目实现三、项目测试四、代码示例五、总结六、代码分析pta-8一、项目简介二、项目实现三、项目测试四、代码示例五、总结六、代码分析改进建议blog2前言关于难度和题目量前三次大作业难度属于偏难水......
  • PTA题目集7~8的总结性Blog
    前言:对于我这种水平的学生来说本次的7-8次PTA的难度之大令我无从下手,况且之前的第6次PTA就已经让我望而止步了,更别提这两次在第6次PTA题目集之上再次进行迭代的题目了。再加上面临的期末周,大量学科等着我去复习,以至于没时间去钻磨PTA的改动,哭死,连老师都说单单是第8次题目集的题目......
  • 第三次blog
    一:前言这是最后一次大作业了,本次大作业让我感觉到难度很大,同时让我也学会了不少东西。学会了如何采用面对对象程序设计,更好的满足对象的需求,使得代码的功能性更强,同时使代码更加严谨,有效。智能家居是在当下家庭中越来越流行的一种配置方案,它通过物联网技术将家中的各种设备(如音......
  • PTA题目集7~8总结性Blog
    (1)前言题目集7,8主要涉及以下知识点,Java是一种面向对象的编程语言,需要理解类和对象的概念,如何设计和实现各种设备的类。设计控制设备类和受控设备类,理解如何通过类和对象来模拟真实世界中的设备和其行为。通过继承和多态实现设备之间的关系和行为的多样化。例如,可以将不同类型的......
  • 第三次冲刺
    第三天冲刺任务目标与解决方案任务目标:查询安卓前端设计及页面美化方法。验证所搜集的实现方法。遇到的问题:无法验证搜集到的实现方法是否可用。具体步骤1.学习与资源推荐首先,以下是一些资源和学习途径:MaterialDesignGuidelines:制定了现代安卓应用的设计标准。......
  • 2024年6月16日 18:10,cnblog博客园的第一天!!!
    终于A了P06614迷宫游戏5,原来是动态规划......点击查看代码#include<bits/stdc++.h>#definedebug(a);cout<<#a<<"="<<a<<endl;#definerep(i,a,b)for(inti=a;i<=b;i++)#definepep(i,a,b)for(inti=a;i>=b;i--)usingnamespacestd;......
  • Vulhub WebLogic漏洞复现
    目录前言任意文件上传漏洞(CVE-2018-2894)管理控制台未授权RCE漏洞(CVE-2020-14882&CVE-2020-14883)未授权RCE漏洞(CVE-2023-21839)SSRF漏洞(CVE-2014-4210)前言前面两篇针对WebLogic存在的XMLDecoder和T3协议反序列化漏洞进行了分析和复现,这里继续借助vulhub来复现WebLogic的其他漏洞......