- 前言
有了三次大作业的经验,即使在面对新的大作业时谈不上得心应手,但也有了一些思路以及应对难点的方法,总归是有了一些心得体会,不会被复杂的测试点和样例搞得捉襟见肘,这也未尝不算进步。
1.知识点
这三次大作业的知识点相较于前几次来说更加复杂,更加专业化,涉及到了面向对象程序设计的核心操作,其中“面向对象”这一点尤为重要,总结这三次大作业的知识点如下:
- 面向对象编程思想,将相关的属性和方法封装在类中,通过设计电路设备类、受控设备类、控制设备类等,将具有相同属性和行为的对象归为一类,实现代码的复用和模块化。
- 字符串处理和解析,包括字符串分割、子串提取等操作。
- 数据结构的设计和使用,例如使用HashMap存储题目信息、试卷信息、学生信息等,使用HashMap存储设备信息,使用List存储连接信息等。。
- 条件判断和循环控制,根据输入的信息进行相应的处理和输出,根据不同的设备类型和状态,进行相应的处理和输出。
- 异常处理,对输入格式错误进行处理并给出提示信息。
- 数学计算:计算电压、转速、亮度等数值,注意精度控制和截尾规则。
- 电路基础知识:理解串联电路、并联电路的原理和特点,以及各设备的工作原理和特性。
2.题量及难度
题量和难度比前三次大作业都多且难是毋庸置疑的,毕竟迭代的过程就是不断成长的过程。题量方面来看,显著增加的是测试点的数量以及代码行数的增加,前几次只需要二三百行便可完成,这三次大作业五六百行都很难拿到理想的分数。难度方面来看,测试点的增加也算是提升难度,没有提示的测试点还是让人摸不清头脑,总体难度也有不小的提升。
- 设计与分析
三次大作业的类图参考
第四次:
(power designer出现未知异常无法画图,5、6次大作业类图由文字形式体现)
第五次:
5:Class Pin {
+inputVoltage: double
+getOutputVoltage(): double
+getInputVoltage(): double
}
Class Switch {
+state: int
+changeState(): void
}
Class FControl {
+Fgear: int
+upgear(): void
+downgear(): void
}
Class LControl {
+Lgear: double
+changeLgear(double): void
}
Class Blamp {
+brightness: double
+changeBrightness(double): void
}
Class Rlamp {
+brightness: double
+changeBrightness(double): void
}
Class Fan {
+speed: double
+changeSpeed(double): void
}
Class Main {
+main(String[]): void
}
第六次:
三次大作业的设计分析
第四次:
类分析:
class Question
class TestPaper
class Answer
class Student
class Delete
Main
1.数据结构:
-
题目信息:使用字典或列表存储,题目编号为键,题目内容和标准答案为值。
-
试卷信息:使用字典或列表存储,试卷号为键,包含题目编号和分值的子字典或子列表为值。
-
学生信息:使用字典存储,学号为键,学生姓名为值。
-
答卷信息:使用字典存储,试卷号和学号组合为键,包含题目顺序号和答案的子字典或子列表为值。
-
删除题目信息:使用集合或列表存储被删除的题目编号。
- 主要功能:
-
解析输入信息:根据输入的信息类型,将信息解析并存储到相应的数据结构中。
-
判题逻辑:根据答卷信息和题目信息,计算学生得分,并输出答题结果。
-
删除题目处理:在计算学生得分时,判断题目是否被删除,若被删除则按0分计算。
-
输出格式化:根据题目得分情况和删除题目信息,输出相应的结果信息。
- 流程:
-
读取输入信息,根据信息类型分别处理并存储到对应的数据结构中。
-
针对每位学生的答题情况,根据答卷信息和题目信息计算得分。
-
若题目被删除,相应处理计算得分时的逻辑。
-
输出学生的得分情况和可能的提示信息。
第五次:本质意义上来说虽然这次大作业拿到分数了,但完成度不是很可观,首先,电路的链接我并没有考虑,由于是单条串联线路,我只是在输出中使用CharAt方法提取特定的字符串进行检测,根据检测的字符串判断控制器和用电器的种类,然后将其输出,并没有按照老师说的“串成一条线”的形式,所以我觉得完成度并不是很好,但在下一次大作业中比较好的解决了这个问题,这次大作业无需多言,难度跟上下两次比并不是很高,所以便先草草带过。
第六次:
设备列表:
1. 控制设备:
-
开关(Switch)
-
分档调速器(Multi-speed Regulator)
-
连续调速器(Continuous Regulator)
2. 受控设备:
-
白炽灯(Incandescent Lamp)
-
日光灯(Fluorescent Lamp)
-
吊扇(Ceiling Fan)
-
落地扇(Stand Fan)
设备特性:
1. 开关(Switch):
-
两种状态:0(关)和1(开)
-
两个引脚,状态为1时输出电位等于输入电位
2. 分档调速器(Multi-speed Regulator):
- 4档调速,输出电位为0、0.3、0.6、0.9倍的输入电压
3. 连续调速器(Continuous Regulator):
- 没有固定档位,输出电位为档位参数乘以输入电压
4. 白炽灯(Incandescent Lamp):
-
亮度在0~200lux之间
-
电位差对应不同亮度值
5. 日光灯(Fluorescent Lamp):
-
亮度为180lux
-
电位差为0时亮度为0,不为0时亮度为180
6. 吊扇(Ceiling Fan):
- 工作电压区间80V-150V,对应转速80-360转/分钟
7. 落地扇(Stand Fan):
- 工作电压区间80V-150V,对应转速80-360转/分钟
输入信息格式:
-
设备标识符K、F、L、B、R、D、A表示不同设备
-
引脚格式为设备标识-引脚编号,如K1-1表示编号为1的开关的输入引脚
-
连接信息用[]表示一组连接在一起的设备引脚
-
控制设备调节信息格式为#+设备标识+设备编号,如#K2、#F3+、#L3:0.6
再建立一个并联电路类以及线类,让两个类是关联的关系,便可实现并联电路的正常联通
3.踩坑心得
bug分析:
第四次大作业:
例一:Main.java:497: error: class, interface, or enum expected
public static void main(String[] args) {
错误分析:是因为在不适当的地方放置了类、接口或枚举的定义,主要是类的位置处理以及{}的编排。
第五次、第六次大作业:
例一:Main.java:449: error: cannot find symbol
if(lines.line[4]="#K1"){
^
symbol: variable line
location: variable lines of type String[]
Main.java:454: error: cannot find symbol
else if(lines.line[5] = "#L1:1.00"){
^
symbol: variable line
location: variable lines of type String[]
Main.java:459: error: cannot find symbol
else if(lines.line[5] = "#K2"){
^
symbol: variable line
location: variable lines of type String[]
错误分析:使用数组lines
时出现了问题,数组的元素是通过索引访问的,而不是通过.
来访问属性。
例二:Main.java:280: error: illegal start of expression
if(lines[0].length() >= 9 && lines[0].charAt(8) == 'K'&&){
错误分析:在代码的某个地方有语法错误,导致编译器无法理解代码的开始位置,&&
后面似乎缺少一个表达式,导致语法错误
需要注意的点:
-
理清设备之间的连接关系:在输入连接信息时,要确保清楚地理解各设备之间的连接关系,包括串联和并联,以确保电路的连接正确无误。
-
准确理解控制设备的调节信息格式:对于开关、分档调速器和连续调速器的调节信息格式要理解清楚,确保在模拟系统中能够正确地调节各个设备的状态和档位。
-
注意电路的接地和电源标识:在输入串联电路信息时,要确保最后一条电路信息包含总电路信息,且起始引脚是VCC,结束引脚是GND,以正确地表示整个电路的接地和电源标识。
-
考虑设备的电阻对电路的影响:在模拟电路时,要考虑到各个设备的电阻对电路整体的影响,确保在计算电路中的电压、电流等数值时考虑到电阻的影响。
-
逐步验证和调试:设计完成后,逐步验证每个设备的功能和整个电路的运行情况,确保各个部分正常工作并且整体电路模拟系统符合预期。
4.改进建议
1.错误处理机制:添加错误处理机制,如输入检查、连接合法性验证、设备状态范围检查等,以防止用户输入错误导致系统崩溃或不正确的输出结果。
2.性能优化:优化算法和代码结构,以提高系统的运行效率和响应速度,确保系统在处理复杂电路时能够快速稳定地运行。
总结
总的来说这三次大作业除了第五次,剩下两次都是比较难的,但也有不小的收获,例如数据结构的应用, 逻辑判断与算法设计,错误处理与异常情况处理,后两次的迭代会越来越难,希望能有更多的收获吧。