前言
1.第四次题目集的7-1在答题程序-3的基础上新增了一些内容,输入的内容增加,并且输入的格式有更加灵活,很好的考察了我们对于信息的处理能力、对正则表达式相关知识点的掌握还有使用面向对象方法编程的熟练度。此外,相比于前面三题,这次题目的要求更加***钻和细致,非常考验我们当前对于Java语言的熟练度以及较强的逻辑思维和算法设计能力。这次题目的工作量相对较大,对我来说操作难度比较大,难以完成。
2.第五次题目集的7-1家居强电电路模拟程序-1是一道非常新颖的题目,与我们的的实际生活紧密相连,题干非常的长,容易使人望而生畏。这就很考验我们的信息阅读和信息提取的能力,需要从长篇大论中总结出与我们编写Java程序有关的数据和条件加以整合,还是比较麻烦的。但是当你把题目的思路理清之后,程序的设计和编写也就相对轻松。本次作业用到了Java中继承、多态的知识,让我对涉及到的Java知识点更加熟悉,同时还用到了电路相关的基础知识,综合性比较强。
3.第六次题目集的7-1家居强电电路模拟程序-2继承了前一次的题目,与第一次不同的是这次要考虑受控设备的电阻,受控设备多了一种落地扇,并且引入了并联电路,增加了题目的复杂性和变化性,初看时有些棘手。本题同样运用到了继承和多态的知识,主要是算法和逻辑方面需要考虑更多的情况。一开始以为第二次迭代只是简单的在第一次迭代的基础上进行稍微的改动和算法的完善,可是按照题目的要求思考下去,发现本次题目与第一次相比有很大的变动,主函数基本上全都进行了改动,并没有想象中的那么简单,写起来还是比较麻烦和费时间的。
设计与分析
用于处理学生答题情况的输入和输出。主要功能包括:
- 读取输入的学生信息、试题信息和答题情况,存储在相应的数据结构中。
- 根据输入的答题情况,计算学生的得分,并输出结果。
- 支持删除试题信息的功能。
- 判断输入格式是否正确
具体实现细节如下:
- 使用
Scanner
类从标准输入读取数据。 - 定义了两个
Map
对象,questionMap
用于存储试题信息,testPaperMap
用于存储试卷信息。 - 定义了一个
List
对象,students
用于存储学生信息。 - 使用
while
循环不断读取输入,直到遇到"end"为止。 - 根据输入的字符串,判断是哪种类型的输入,并进行相应的处理。
- 对于"#N:"开头的字符串,表示试题信息,将其存储到
questionMap
中。 - 对于"#T:"开头的字符串,表示试卷信息,将其存储到
testPaperMap
中。 - 对于"#X:"开头的字符串,表示学生信息,将其存储到
students
列表中。 - 对于"#S:"开头的字符串,表示答题情况,根据答题情况计算学生的得分,并输出结果。
- 对于"#D:"开头的字符串,表示删除试题信息,从
questionMap
中移除对应的试题。 - 如果输入的字符串不符合预期格式,输出"wrong format"提示。
代码实现了一个简单的学生答题系统,可以处理学生信息、试题信息和答题情况的输入和输出。
2.第五次题目集7-1首先根据题目要求创建好所有的类,再根据细节对类的属性和方法等进行补充。UML类图如下:
本题的重点在于通过读取控制设备的状态获得电路的总电压,再根据总电压求出各受控设备的亮度或速度。容易被忽略的是,本题中的控制设备——开关可以重复出现,而连续调速器和分档调速器最多只能出现其一并且不能同时出现,而且只能直接连VCC。假如电路中有连续调速器或者分档调速器,根据输入信息读取level,再计算出电路电压,最后判断开关是否全部打开;假如电路中既没有分档调速器,也没有连续调速器,只需要判断开关是否全部打开(如果电路中存在开关的话),若全部打开电压为220V,否则为0V。得到电路的总电压后就可以根据受控设备的条件求出相应的亮度(或转速)。
白炽灯求亮度的方法如下: 日光灯求亮度的方法如下:
吊扇求速度的方法如下: 根据分档调速器获取电压的方法如下:
根据连续调速器获取电压的方法如下: 根据开关获取电压的方法如下:
将输入的信息读取后放在ArrayList里面,方便操作。
题目啰里啰唆说了一大堆,其中最主要的信息就在上面,将这些信息提取出来之后,思路就会变得比较清晰,代码写起来就比较流畅。
3.第六次题目集7-1在第五次的基础上增加了一些要求。UML类图如下:
增加了并联电路,要考虑受控设备的电阻,让电路变得更加复杂,所要考虑的东西也更多了。
以串联电路类为主体,从单个的串联电路开始分析。
该方法读取一条串联电路中的所有电路设备,放在ArrayList数组里,同时得到设备的名字。
该方法用于判断一条串联电路是否处于通路状态(是返回true,否返回false)。 该方法用于返回处于通路状态下的一条串联电路上所有受控设备的总电阻。
大概的思路如下:
- 读取输入信息,根据输入信息创建相应的串联电路类和并联电路类对象
- 读取输入信息中所有开关的操作情况
- 根据所有控制设备的状态求出主电路的电压
- 求出各并联电路的电阻进而求出整个电路(主电路)的总电阻
- 计算求出每个串联电路(除主电路外)的分压
- 根据受控设备的分压求出每个受控设备的亮度(或转速)
- 根据题目要求排序输出所有电路设备的工作状态
踩坑心得
主要说说第五、六次题目集踩的坑和犯的错。
- 没有充分理解题目的意思,忽略了一些细节。比如,一开始做题时以为开关也只能出现一次,但是又没有发现是这个问题,所以不管怎么改还是这么多分,最后经过同学提醒后才醒悟过来没有考虑到这种情况,浪费了很多时间,追悔莫及。
- 没有养成良好的编写代码的习惯。写代码时常常忽略用private将成员变量私有化,对有些Java知识点的概念比较模糊,还有很大的进步空间。
- 写代码的时候容易写着写着脑子就乱了,逻辑混乱,需要多写多练多思考加强编程能力。
- 写出来的代码比较冗长且可读性不是很强,还需要优化自己写的代码,让它变得更加简练高效并且逻辑清晰。
- 在计算并联电路电阻的时候没有考虑到其分路电阻为零时的情况,造成求出来的并联电路电阻出错,无法得到正确答案。
- 一开始没有考虑到并联电路的所有分路都不处于通路状态的情况,导致得到的总电压不为0。
- 在面对难题的时候态度不够端正,觉得难和花时间就选择不去写,错过了前面几次可以让自己的编程能力获得进步的机会,在Java课程上的学习还是有些许懈怠。世上无难事,只要肯登攀,以后的题目不管难度怎样都要花时间去思考、去练习,这样才能取得进步。
总结
通过这三次题目集的磨练,我不仅巩固了Java基础语法,还应用了面向对象编程(OOP)的原则,如封装、继承和多态性,使我对Java的应用有了更广泛的了解。
通过家居强电电路模拟程序的开发,我学习到了如何用Java实现复杂逻辑的建模,以及如何将实际问题转化为程序可解决的方式。答题模拟程序的编写则加强了我对集合框架的使用,以及数据结构和算法的应用,提高了我的编程能力和代码效率。同时,对于String、ArrayList、HashMap等常用知识点也在多次运用中更加熟练,收获不少。
尽管在知识掌握上取得了一定的进步,但也存在一些不足之处。例如,对于复杂的电路模拟,我发现我的算法设计能力还有待提高,程序优化方面也缺乏经验;同时,在答题模拟程序中,我对于复杂问题的分析和解决能力还不够强,需要进一步加强算法和数据结构的学习,Java编程的能力还有很大的进步空间。
针对上述不足,我计划采取以下措施进行改进:
-
加强算法学习:通过学习计算机科学中的高级算法和数据结构,提高问题解决的效率和质量。
-
实践项目优化:通过性能分析和调优,提升程序运行效率,增强代码的可维护性和可扩展性。
-
学习设计模式:深入理解并实践常见的设计模式,提高软件设计的合理性和代码的复用性。
-
跨学科应用:由于家居强电电路涉及电子学知识,我需要补充相关领域的知识,以更好地理解和模拟电路的行为。
通过这三次题目集的训练,我不仅提升了自己的编程技能,还学会了如何将编程知识应用于实际问题解决中。接下来的重点是提高自己在算法设计、程序优化和跨学科应用方面的能力,以适应更复杂和挑战性的编程任务。
标签:总结,Java,答题,PTA,电路,信息,题目,输入 From: https://www.cnblogs.com/worldpeacecyzzl/p/18239191