最后一次Blog
一、前言
第七次大作业 7-1 家居强电电路模拟程序-3
知识点
作为第三次电路迭代,本次题目增加了互斥开关,互斥开关有三个引脚,还可以正反接,同时,本次题目还增加了受控窗帘,受控窗帘会受到室内灯光的光照强度控制,光照强度的来源是日光灯、白炽灯,需要对整条电路的灯光亮度进行相加才能获得总亮度,我认为题目难点在于互斥开关的不同接法和反接的情况,此外还有多串联电路以及多并联电路的引入
题量
题目量适中
难度
难度中等
第八次大作业 7-1 家居强电电路模拟程序-4
知识点
最后一次大作业迭代是所有大作业中最难的一次,不仅增加了电位的表示,还增加了并联电路里还有并联电路的要求,此外,还增加了一个二极管。整个电路相当复杂,而且还会出现电路反接、电路短路、后面引脚比前面引脚电位更高的情况,所以,需要我们考虑的情况特比多,主要考察对电路的分析能力以及电流、电位正确处理的能力
题量
题量较大
难度
难度较高
期末考试
知识点
期末考试主要考察类的封装、继承和接口的实现,整体难度没有大作业这么难,但是题目的文字较多,是带有情景理解的考试题,需要我们仔细分析题目中的要求,且要在有限时间内完成代码的编写和提交,考察我们的代码编写能力以及代码的规范性
题量
题量中等
难度
难度中等
二、设计与分析(电路设计、期末考试)
第七次大作业 7-1 家居强电电路模拟程序-3
知识点
在本次电路设计的第三次迭代中,题目引入了具有三个引脚的互斥开关,这种开关不仅能够实现基本的电路控制,还支持正反接,增加了电路设计的灵活性。此外,题目还新增了受控窗帘功能,该窗帘能够根据室内灯光的光照强度自动调节,以适应不同的环境需求。这一迭代的挑战在于处理复杂的多串联和多并联电路,这要求我在电路设计时必须考虑到电路的稳定性、效率以及互斥开关与受控窗帘之间的协同工作,确保整个系统能够精确响应光照变化并作出相应的调整,主要考察多串联电路和多并联电路的设计能力
类的设计:
整体设计思路:
- 电器设备类(Electric_Device):最高父类,所有电器设备都继承自该类,抽象出的共同属性是输入电压、输出电压、设备类型、设备ID。抽象出的共同方法是获取设备状态
public abstract void Electric_Show();//获取设备状态的抽象方法 - 控制设备类(ControlElectric_Device):所有控制设备的父类,继承电器设备类,继续将电器设备类中获取设备状态的抽象方法进行抽象
- 连续调速器(Continuousgovernor):继承控制设备类,设有挡位参数的特别属性,实现了父类获取设备状态的抽象方法,可以将将连续调速器的挡位打印出来
- 分档调速器(Gradegovernor):继承控制设备类,设有挡位参数的特殊属性和输出电压的特殊属性,可以根据挡位得到具体的输出电压
- 开关(Switch):继承控制设备类,设有开关状态的特殊属性,实现了父类获取设备状态的抽象方法,可以将开关的状态打印出来,同时可以设置开关的状态(切换开关状态)
- 受控设备类(ControlledElectric_Device):所有受控设备的父类,继承电器设备类,继续将电器设备类中获取设备状态的抽象方法进行抽象
- 日光灯(sunlightlamp):继承受控设备类,设有光照强度的特殊属性,实现了父类获取设备状态的抽象方法,可以将日光灯的光照强度打印出来
- 吊扇(Hangingfan):继承受控设备类,设有风速的特殊属性,实现了父类获取设备状态的抽象方法,可以将吊扇的风速打印出来,同时,可以根据电压差获取吊扇在电路中的转速
- 白炽灯(Incandescentlamp):继承受控设备类,设有光照强度的特殊属性,实现了父类获取设备状态的抽象方法,可以将白炽灯的光照强度打印出来,同时,也可以根据电压差获取白炽灯在电路中的光照强度
- 互斥开关(MutualExclusionSwitch):继承受控设备类,设有开关状态的特殊属性,实现了父类获取设备状态的抽象方法,可以将互斥开关的状态打印出来,同时,可以设置开关的状态(切换开关状态)
- 串联电路类(SeriesCircuit):继承电器设备类,设有控制设备集合和受控设备集合
ArrayList<Electric_Device> Electric_Devices; // 电路中的设备列表
实现了可以添加电器进入串联电路中,同时实现了获取电路中所有电器设备信息状态的方法 - 用户输入类(My_Input):处理用户输入的父类,抽象出用户输入的共同属性用户的每行输入字符串,并抽象出获取用户输入并处理的抽象方法
abstract public void GetUesrInput(String line,SeriesCircuit Series); //获取用户输入 - 用户类(My_User):将整个电路进行处理,通过对串联电路的分析得出所有电器的设备状态,得出后根据排序规则一一打印出来得出正确答案
- 排序类(My_Sort):利用Collection的sort方法,对用户输入的电器设备进行排序,根据电器设备类型和电器设备ID进行排序,实现该自定义的排序,需要我们实现Comparator接口,重写compare方法
- 并联电路类(Parallel):并联电路由一系列串联电路组成,而串联电路又是由一系列电器设备组成,在串联电路中,我设计的是
ArrayList<<ControlElectric_Device>和ArrayList<ControlledElectric_Device>,所以在并联电路中,我直接将多个串联电路看成一个新列表ArrayList<SeriesCircuit> parallel,并在其中添加计算总电阻和判断电路是否断路的方法 - 关键处理类(Unified_Output):这个类被我设计用来处理整个电路的电阻计算和电压计算以及排序显示设备信息,主要就是先将整个电路的主电路抽取出来,并对主电路中的串联电路、并联电路根据电阻分压得到相应电压,这样就可以分开计算各自内部的控制设备所获得的电压差,从而判断他们的状态
- 匹配类(My_Match):这个类被设计用来处理用户输入的电器设备,将用户输入的字符串与需要创建的电器设备进行匹配,如果匹配成功,则将用户输入的电器设备创建并添加到电路中,如果匹配失败,则继续向下匹配
整体类图:

顺序图:

圈复杂度和整体程序结构数据分析:



- 从上面分析的数据可以看到,虽然我的代码行数比较多,但是我的类的设计比较合理,所以我的圈复杂度并不高,只有3,而且我的代码结构比较清晰,因此我的代码的可读性比较高
新增类的具体实现:
匹配类
对于匹配类,因为题目设计的输入是#T、#M这样的电路或控制设备调节的输入,所以我将题目的输入封装成一个匹配类,这个匹配类根据我写的正则表达式进行匹配,我将正则表达式的匹配结果封装成了一个patterns数组,当输入的字符串匹配成功后,会返回该数组的下标然后继续在程序中处理,具体实现如下:
1、patterns数组


我们创建该数组后,通过正则表达式语句的匹配操作将每个可能出现的字符串写成匹配式,并存入数组中
主程序一旦匹配成功后,judge函数就会返回该字符串在patterns数组中的下标,有了这个下标,我们就可以在函数中添加电路或者对电路中的控制设备进行调节
并联电路类
1、在处理并联电路的总电阻计算时,我们遵循一个基本的物理公式,即采用(1/R = 1/R1 + 1/R2 + ... + 1/Rn)的公式,其中R是总电阻,R1、R2、...、Rn是串联电路的电阻,通过这种方式,我们可以精确地计算出并联电路的总电阻



首先遍历所有串联线路,然后遍历每个串联线路中的所有设备,如果设备是受控设备,则将其电阻值加到总电阻中,我们累加当前线路电阻的倒数,最后返回并联线路的总电阻,即所有线路电阻倒数之和的倒数
2、判断并联电路是否全断路,并联电路全断路说明其中的所有串联电路都断路了,所以我们需要遍历其中的所有串联电路,判断他们是否断路,如果有一个串联电路不断路,那么并联电路就不断路

遍历并联电路中所有的串联电路一次判断即可
反思:
- 为什么我计算并联电路的总电阻需要把所有倒数先相加求总和以后再取倒数算出呢?实际上,在计算并联电路的总电阻时,采用将所有电阻的倒数相加后再取倒数的方法,是一种确保计算精度的关键步骤。这种方法之所以重要,是因为在并联电路中,电流可以自由地在各个分支间分流,而每个分支的电阻对总电阻的影响是相等的。通过将每个电阻值的倒数相加,我们其实是在累加每个分支对总电流的贡献度,这样的累加过程能够更准确地反映电路的真实情况。如果我们在计算过程中直接将电阻值相加,那么在处理诸如1/3这样的分数时,就可能会因为四舍五入或分数的简化而丢失精度。尤其是在涉及多个电阻值时,这种直接相加的方法会导致累积的误差越来越大,最终影响到总电阻值的准确性。而先求倒数、再求和、最后取倒数的方法,可以避免这种累积误差,因为它允许我们在每一步都保持较高的数值精度,特别是在使用分压法等需要精确电阻值的场合。此外,这种方法还有助于简化计算过程,因为倒数的加法通常比直接处理分数的加法来得直观和容易。在实际应用中,这种方法不仅提高了计算的准确性,还提高了效率,使得开发的技术人员能够快速而准确地得到并联电路的总电阻值,进而进行更精确的电路设计和分析。因此,采用这种方法是确保电路设计和分析精确度的重要步骤
关键处理类
Unified_Output类是电路分析中的核心类,它负责处理整个电路的电阻计算、电压分配以及设备信息的排序显示。这个类的主要职责是首先从复杂的电路网络中提取出主电路结构,然后对主电路中的串联和并联电路进行细致的分析。通过应用电阻分压原理,Unified_Output类能够精确计算出各个分支上的电压分布
1、先要在整个电路中,找到主电路,因为只有找到主电路后,我们才能利用主电路来对串联电路和并联电路进行电压分压

检查该电路是否参与并联,如果没有参与并联,则说明该电路为我们需要主电路,随后我们返回该电路类型作为主电路
2、先对整个电路求得电压,由于有可能有控制设备,所以整个电路的电压要先经过控制设备的降压后才能求得,得到总电压后,先把串联电路和并联电路分别看成两个元件求电压,再分别对它们内部根据电阻分压来求各元器件的电压差,最后输出元器件的状态

首先获取主电路类型,获取类型后读取主电路,如果主电路是断路,则直接输出电路状态,否则,如果所有并联电路都正常,我们获取标准电压和总电阻,然后计算主电路的电压,并分配电压到并联电路,最后再输出电路状态
3、如果找到窗帘,则需要对整条电路的光照强度进行求和,因为窗帘是受光照强度影响的,我们把电路中的白炽灯和日光灯的光照强度相加,得到总光照强度。根据总光照强度得到窗帘的打开程度

先获取白炽灯的光强,再获取日光灯的光强,最后相加得到总光强
反思:
- 我一开始写代码的时候未能充分预见到控制设备对电路电压的影响,这是一个常见的疏忽。我最初的代码设计是直接将220V的电源电压分配给整个电路,而没有考虑到控制设备的存在及其对电压的调节作用。这种做法忽视了控制设备在电路中起到的降压作用,导致主电路获得的电压计算不准确,进而影响了整个电路分析的准确性。后来我发现修正这一错误并不复杂,只需要在电压计算过程中引入一个判断机制,先检查电路中是否存在控制设备。如果存在,我首先计算这些控制设备对电压的影响,从而确定它们消耗的电压份额。这样,我就能够从总电压中减去控制设备消耗的电压,得到主电路的实际工作电压
互斥开关类类以及处理互斥开关
1、定义互斥开关的三个引脚

题目中的要求是默认1号和2号引脚相互接通,而1号和3号引脚断开,所以我用了boolean型变量存储三个引脚的状态,其中true表示接通,false表示断开
2、切换互斥开关的状态

切换开关的状态其实就是把1和2号引脚的状态进行交换,把1和3号引脚的状态进行交换,最终将1和3连接起来
3、对于互斥开关的处理,哪条通路则处理那条电路即可,当作一条串联电路,而没有通路的一端,我们直接当作断路处理

反思:
- 我第一次写互斥开关的时候,将引脚二和引脚三作为它的属性写在这个类里,后来我发现如果写成属性的话,在主程序逻辑的实现中会跟其父类的引脚混淆,而且操作这个属性相当的麻烦,之后想了一想,直接把两个引脚绑定在一起,因为题目中只会出现1、2引脚连接的情况和1、3引脚连接的情况,当我需要处理的时候,直接判断被绑定的引脚之间的状态即可,需要切换状态的时候直接切换
第八次大作业 7-1 家居强电电路模拟程序-4
知识点
最后一次的大作业,引入了电位表示的概念,增加了电路分析的维度,还提出了并联电路中嵌套并联电路的复杂要求,此外,二极管的加入进一步增加了电路的非线性特性,使得电路的行为更加难以预测,且需要我们考虑到各种异常情况,如电路反接可能导致的电流流向问题、电路短路可能引起的电流急剧增加,以及某些情况下后端引脚电位高于前端引脚的非典型电位分布
类的设计:
整体设计思路(新增类):
- 二极管类(FRED):二极管类继承受控设备,该设备具有单向导电性,当正向导通时,其电阻为0,而反向导通时,电阻为无穷大
- 处理类(My_Match):处理类主要负责处理多串联电路,并联中包含并联的电路,同时,将电位和电流引入其中,此外,加入了二极管
- 打印输出类(Final_Output):打印输出类主要就是对每条电路中的所有设备进行一个电位的打印输出,同时,如果遇到短路的现象,会输出短路提醒的语句
- 新修改的串联电路类(Series_Circuit):修改过后的串联电路类新增了电位和电流的处理情况,并且在遇到无穷大的电流时,能够正确反映电路短路的现象
- 新修改的并联电路类(New_Parallel):修改过后的并联电路完成了并联电路中出现并联电路的情况
整体类图:

顺序图:

圈复杂度和整体程序结构数据分析:



- 虽然我其中的一个类的圈复杂度达到242,非常夸张,但是对于我的主类,圈复杂度只有3,所以还是可以接受的
新增类的具体实现:
二极管类
对于二极管类,我们需要知道它在电路中是正向导通还是反向导通,若是正向导通,那它就可以当作一条导线处理,这时这个二极管类就相当于一个电阻为0的电器设备,而若是反向导通,那它就相当于一个电阻为无穷大的电器设备,这时这个二极管类就相当于一个断路器
1、获取二极管的电阻

如果是正向导通,则返回0,否则返回无穷大,无穷大的表示我用(1/0.0)来表示
2、处理电阻无穷大的情况,对于无穷大的处理,利用isNaN表达式来处理

Double.isNaN是一个静态方法,它接受一个double类型的参数,并返回一个布尔值,其中,NaN是一个特殊的浮点数值,表示一个未定义的数值结果,当我们程序中出现了(1/0.0)这种无穷大的表示时,利用这个方法可以处理无穷大电阻的情况
反思:
- 使用
Double.isNaN方法进行NaN值的检查是至关重要的,因为它确保了程序能够正确处理那些由于数学运算错误或数据异常而产生的非数字值。这种处理方法让我意识到,代码的健壮性不仅取决于正常流程的完美执行,更在于异常情况的妥善处理。通过这种方式,我学会了在设计程序时更加注重细节,预见可能的异常,并采取措施确保程序在面对不确定输入时依然能够稳定运行
新修改的串联电路类
在修改过后的串联电路类中,我新增了电位和电流的处理情况,并且在遇到无穷大的电流时,能够正确反映电路短路的现象
1、给串联电路中的电器分配电压,其中电器可能是控制设备、受控设备、串联电路、并联电路

对于每个不同的电器,我们都把它当作单独的设备,特别是对于串联电路或者并联电路,我们需要逐步拆解细分
2、如果电路是断路,则该电器的输入电位为0,输出电位也为0,同时,该电器的电流为0

我们用分压法算电器的电压,如果总电阻无穷大,则说明整条电路是断路
3、计算电压压降,即电势差

通过驱动电压分压法,得到电流从该电器流通后产生的电势差
4、如果电路是导通状态,则直接通过分压法求得输入引脚的电位和输出引脚的电位

得到电器的输出电位后,我们可以直接将该输出电位传输给下一个电器的输入电位
反思:
- 这次大作业中,由于题目新增了非常多的要求,所以我对我原来的串联电路进行了修改,且重新写了我的分压法,上次大作业的分压法中,我的方式有点小问题,即在计算总电阻的时候由于提前下转型,所以直接用第七次大作业的分压法会使得这一次大作业出现精度不准的情况,正确的做法是不需要在处理过程中提前下转型,而是在打印的时候操作
新修改的并联电路类
对于新的并联电路类,我主要是把计算并联电路的总电阻进行了修改,同时,在串联电路分压法的基础上,我也为并联电路添加了并联电路的分压法,这样就可以完成对整个电路的电压计算
1、计算并联电路的总电阻,这里我的方法用了简化,即直接遍历并联电路中的所有串联电路,对串联电路中的所有电器电阻进行求和,最后相加,这样就可以得到并联电路的总电阻


如果出现并联电路中所有的串联电路都断路,则说明,整个并联电路都是断路的,这时,整个并联电路的电阻就是无穷大
2、并联电路的分压法,由于并联电路中,每个电器所获得的电压都是相同的,所以,我们可以直接用分压法来计算每个电器所获得的电压

首先,将总电压赋值给每个串联电路,我们知道并联电路中每个串联电路的电压相同,然后,设置串联电路的输入引脚电压,最后,调用每个串联电路的分配电压方法
反思:
- 其实在设计并联电路的时候,我用了一些小巧思,比如说,对于并联电路中的串联电路是否断路的判断,我是对该串联电路中的所有电器的电阻总和进行相加,如果电阻总和大于10000,按照我写串联电路类的逻辑,这条电路一定是断路(因为题目中正常的电路的电器设备电阻和不可能超过这么大的数),而没有断路的串联电路我就会在并联电路中将其标记为
true,这样可以简便我的总电阻运算
期末考试
知识点
期末考试主要考察的是类的封装、继承与多态,第一题求的是谷仓的不同形状下的体积,设计好不同形状的类后直接调用类中求体积的方法就能求得体积。第二题需要我们计算谷仓的容积,这题要用继承和多态,即不同形状的谷仓继承同一个最高抽象类,在打印容积的时候利用多态打印出结果即可。第三题是在第二题的基础上增加排序,利用接口一下就能得出答案
1、求不同形状的谷仓的体积

立方体的谷仓体积求法如上图所示

圆柱体的谷仓体积求法如上图所示
2、如果立方体的体积大于圆柱体的体积,则打印立方体的体积,否则打印圆柱体的体积

3、谷仓抽象类的实现,属性为height,抽象方法为getVolume,即求不同形状下的谷仓体积

4、根据题目要求生成ArrayList的谷仓列表,然后遍历该列表,调用getVolume方法,比较不同形状的谷仓的体积,最后打印适合题目要求的不同谷仓的体积即可


反思:
- 为什么题目建议我们用
ArrayList而不是用数组呢?实际上,用ArrayList这种可变长数组对于增加谷仓和创建谷仓对象增加到谷仓表中有非常大的帮助作用,我们只需要简单调用add的方法就能实现增加元素,这种简便的方式在期末考试这样短短的时间内非常高效且实用
5、对于第三题,我们只需要在第二题的基础上,调用Collections.sort方法,传入一个实现了Comparator接口的匿名内部类,重写compare方法,即可完成对谷仓列表的排序,最后打印出谷仓列表中的第一个元素即可

其实如果对Java接口特别熟悉的话,这题的实现会非常快,因为Comparator接口中已经定义了compare方法,我们只需要重写该方法即可
反思:
- 一开始看到第三题的时候,我还想着手搓冒泡排序,但是想了一想,我们学了一学期的面向对象语言,如果在期末考试这么短的时间内让我们用面向过程的方式去写排序,这显然是不可能的,所以题目考察我们的一定是让我们用面向对象的方法去做这道排序题。所以我回忆起了做实验的时候要求我们用的接口的排序方法,于是这道题就迎刃而解了
三、踩坑分析
电路程序中的引脚编号问题
- 之前我一直没有发现,我的电路程序中的引脚编号是有问题的,直到第七次大作业我才发现,电器排序中,电器类型+编号是根据字符串来排序的,而我前面的两次电路程序的迭代用的是
int整形方式的引脚编号,所以整个问题在第七次大作业中会出现很多测试点无法通过的情况 - 以下是我没有发现引脚编号问题之前写的代码的PTA得分情况,引脚编号用的是
int整形
![img]()
- 找我的好兄弟要的传奇测试样例,得出来的结果就已经不一样了
![img]()
- 下图是我跑出来的结果
![img]()
- 下图是正确结果
![img]()
![img]()
- 后面我就把我的引脚编号从
int型改成了char类型,同时修改了我的排序函数,最后就顺利通过了所有样例
![img]()
排序问题
- 在整个学期的大作业和期末考试中,我都吃了排序的亏,因为题目要求的排序和我自定义的类的排序在java中是没有提供直接调用的排序函数的,我首先的想法是自己手搓排序方法,想利用冒泡排序和选择排序来对电器设备或者自定义类进行排序,但是,实际上我并没有利用java的特性来实现,而是用面向过程的思维去做,这就导致了我的排序一直有问题,调试起来非常麻烦。实际上,在java中是有
Comparator接口和Comparable接口的,通过实现Comparator接口或Comparable接口,重写compare方法,就可以实现自定义排序,效率很高 - 这是考试的时候自己手搓的冒泡排序提交的代码,写了一堆提交上去的还是显示编译错误
![img]()
- 后来想起来用
Comparator接口,再利用Collections.sort方法,最后顺利通过了所有测试点
![img]()
![img]()
四、改进建议
- 首先是对于整个学期写代码风格的一个改进吧,写了这么多次大作业,我意识到面向对象的代码编写也是非常注重调试的过程的,所以为了避免出现写到最后一堆代码调试起来复杂,最好是写一个类或者一个方法就测试一下功能的完整性,不然弄到最后调试起来全是变量,关键点是自己写的变量自己都忘记是干什么的了
- 然后我的代码最需要改进的就是用户输入合法性的测试,在软件设计过程中,作为设计师,除了考虑软件工程的功能完整性,还需要考虑用户的输入,因为我并不知道用户会在输入时犯些什么错误或者奇思妙想故意输入一些奇怪的字符,所以,我需要对用户的输入进行合法性测试,在整个学期的所有大作业中,我本来写了很多正则表达式的字符串数组来实现判断用户输入合法性,但是到了电路程序中,由于题目的输入中没有包含错误输入的样例,所以我也搁置了对于电路中用户输入异常的处理。实际上,这是非常危险的,因为在工程中,如果用户输入的字符不符合我们的要求而且我们的程序没有抛出异常,程序很容易陷入崩溃,甚至会被不法分子攻击,所以,我需要在电路的程序中,对用户的输入进行合法性测试,防止程序崩溃
- 在代码实现中,我经常会遇到大量的
switch语句和if-else语句,这些条件判断不仅增加了我代码的复杂度,也降低了代码的可读性和可维护性。为了优化这种情况,我觉得我可以采用Java中的工厂模式来提升代码质量。工厂模式允许代码将条件判断逻辑抽象化,并封装在工厂方法中。通过这种方式,我可以将原本分散在代码中的条件判断集中管理,从而实现代码的复用。具体来说,可以将条件判断作为参数传递给工厂方法,由工厂方法根据这些参数来决定创建并返回哪种类型的实例。这种方法不仅提高了代码的可读性,还增强了代码的灵活性和可维护性 - 还有一个比较现实的问题,不要把大作业都推到最后几天再来写,首先是没时间,第二是对于类的设计我的很多想法都不能一一印证和实现,所以要提前规划好
五、总结
第七次、第八次大作业总结
- 第七次大作业折磨我的仅仅是互斥开关的设计,其实设计好了互斥开关,对于多串联电路包含互斥开关的正反接都能解决。而最后一次大作业就是真的难度提升了,一下子增加的要求使得我第七次的代码大多数都复用不了,可以说是从头设计再重新写了,虽然给了三个星期的时间,但是当我写了2k行代码之后发现自己的得分不是很理想时,我也产生了一点惰性,因为调试起来太麻烦了,跟踪一个变量跟踪老半天,一个不留神或者调试点快了又得重新来,所以后面的时间也没怎么改(主要也想不到什么测试点了)
期末考试总结
- 期末随堂考试中我有点紧张,因为时间给我的并不是那么充裕,拿到题目的时候看到文字这么多就有点慌了,前十分钟审题都没有审清楚就开始敲代码,敲了一半才发现立方体并不是简单的指正方体,我的想法还简单了,老师提醒了之后我才猛地想起来,所以其实最难的题反倒是第一题,卡了我半小时。第二题因为试卷上有类图的提醒,所以根据类图去设计类再结合第一题的代码,非常快就弄出来了。而第三题我差点踩坑自己去手搓排序函数,后来想了一下能不能尝试面向对象的方式去解题,没想到用接口一下子就把结果弄出来了,整个过程还是相当的惊险的
学期总结
- 首先是我的个人成长与反思,在过去的一个学期中,我通过参与大作业项目,对面向对象编程有了更深入的理解和实践。我学会了使用正则表达式、字符串分割、代码优化和提高代码可读性等关键技能,这些都为我未来的编程生涯打下了坚实的基础。我意识到了自己在类设计、代码结构和编程思维上的不足,比如缺乏类图和顺序图的预先设计,以及代码中的冗余和风格问题。我认识到,如果不改进这些做法,未来的编程任务将会更加困难。
- 然后是学到的方法和小巧思,我学会了如何有效利用网络资源,比如在线正则表达式测试工具,来快速验证和调试代码。同时,我也意识到了团队合作的重要性,通过在班级群组中积极交流,我能够及时获得同学的帮助,识别并修正代码中的错误。这些互动不仅帮助我解决了即时的问题,还增强了我的问题解决能力,并为我提供了一个持续学习和成长的环境。
- 再写一写我的进步吧,做了八次大作业,我已经可以将类职责划分得更清晰,减少代码的耦合性,提高代码的复用性,我学会了使用Comparator接口来实现自定义排序,这不仅提高了编码效率,也使代码更加简洁。此外,我也学会了利用继承和多态来优化程序,通过抽象共同性质来减少代码量并提高可读性
- 说一下在Java课堂学习相关的事和给老师的建议,对于老师的教学方法,我非常感谢老师在课堂上的建议,比如老师强调在编写大作业前要先画类图和顺序图。同时,我也建议老师能够对未通过测试点的问题进行更详细的拆分讲解,以便我们能够更准确地理解问题所在。有些大作业没有提示点或者测试点非常难找,有时经常花了很多时间调试代码还会出现改完结果后的分比之前的分还低的情况,所以我希望老师能够在大作业中多加几个提示样例,这样可以减少我们学生无用的挣扎时间
- 最后说我的未来展望,在以后的工作方面,我可能不愿意去做底层写代码的码农工程师,而是希望自己去做一个软件或硬件的开发设计者,因为调试代码真的非常烦,尤其是在写了非常多的代码的情况下,而且以后面对的是更多的文件系统和复杂的计算机操作系统层面的代码,我觉得以我的能力去面对是完全静不下心来的。而选择开发设计者,我可以发挥出我自己的思想,在我自己的思想中去设计一个项目,我的效率会提升的非常快,而且,我也可以通过我的设计,去实现我自己的思想,这会让我感到非常兴奋。








