类的继承,接口的使用

news/2025/3/15 23:29:46/文章来源:https://www.cnblogs.com/wuhaoxuan/p/18223142

1-知识点,题量,难度总结

1.this与super的区分与使用,如何正确使用多态(用父类类型创建子类对象,并调用子类中重写父类中的抽象方法)(在大作业5中的第二道修改学生信息中)(第三道中父类向下转型,另外还有子类向上转型)。
2接口的使用,多态的具体体现(例如在第一次家居强电电路模拟程序大作业中我使用了多个接口来达到编程的目的,其中有接口Device抽象类(所有设备的父类,包含属性与方法)接口Fan(风扇抽象类),接口Light(灯抽象类),有白炽灯(incandescent类),日光灯(Fluoredescent类)都继承灯类(其中灯类中有计算流明ux的抽象方法),吊扇(ceiling类)继承风扇类(风扇类中有计算风速的抽象方法))
3.继承与多态的结合,一个子类(白炽灯)既继承了父类(device),又实现了接口(Light)。
4.comparable接口与compareTo方法重写,以及排序collection.sort的使用(在大作业四和大作五和六中)
5.题量总结,大作业四用了640行,五用了470行,六用了1020行,这三次大作业的题量对于我来说能接受,大作业六纯属是因为类太多才导致代码行数太多,其实就是在一些相似的类中改一些属性和方法。在四中发现原来在构思设计类时由于方法并不是很完善,导致后续出现很多错误,而且这些错误之间基本没有什么联系,也就是说如果要改代码的话就需要改很多代码,可能导致原有代码的逻辑会发生较大改变。
6.难度总结:题目难度都还可以,因为在前几次大作业的设计思路都没有构思完全,所以导致修改代码时需要带上原有的逻辑进行设计,这就导致难度加大了好多。

2-设计思路

大作业四:由于是在大作业三的基础上改一些细节,使其输入方法发生一些改变。

原思路:
设计思路:
单选题,填空题,多选题由于都是题目所以都继承question类,其中包含题号,题目类型,标准答案和抽象方法判断一道题目是完全正确,部分正确还是错误。
1.先判断每行的输入格式,将格式不正确的输出,并将格式正确的存入到一个字符串数组中。
2.读取被删除的题号,并将之存到一个ArrayList里,没有则不需要判断。
3.再读取到题目信息时,判断该题是否被删除,不被删除的话则正常将每个信息存入,并放到一个ArrayList中,否则将内容换成the question num invalid~0。
读取多选题信息时,先将读取到的答案分开存入到一个arrayList中,填空题答案则是放到一个字符串中。
4.读取试卷信息,根据试卷信息将从questionList中提取相应题号存入到该paper中的questiongList中。
5.读取学生信息。
6.读取答卷信息,先判断该答卷号能否找到相应的试卷,不能的话则输出The test paper number does not exist;反之则正常判断。
空:判断答卷答案是否小于试卷上的题目数量,小于的话则证明有空的答案;(answer is null)
不存在:判断试卷信息上题号是否在questionList中找的到,找不到的话则说明不存在;(non-existent question)
找学号:在学生信息中找,没找到的话则输出(is Not found),找到的话则正常输出学号,姓名,分数,总分。
7.情况判定
(1).该题为空,直接输出answer is null。
(2).该题存在,判断是否存在,存在则判断是否正确。不存在则输出non-existent question。
(3).多选题,填空题判定方法,先判断标准答案中是否包含学生答案,如果不包含,则答案为错误答案,如果包含,则往下判断是否相等,如果相等,则为全对,不相等则则为部分正确,其他情况则为错误答案。

大作业五:

设计思路:因为设备有两个引脚,所以只需要找一个引脚所接收的设备,一旦用正则表达式找到就直接为其创建一个相应的对象,然后进行判断是哪种设备。然后进行电压计算和设备信息输入。
1.将Device类设置为所有设备类的父类。其中包含抽象方法,一些get(set)方法,还有一个display用于输出该设备的相关信息。
2.电路电压判断,如果是开关判断,就设置为两种状态,开关打开电压为0,否则为220。而分档调速器和连续调速器则是用其挡位乘以220,最后输出电压大小。
3.利用接口Fan和Light实现计算风速和流明ux的方法。
4.其他设备类(如Incandescent)则有名字name,电阻resistance,电压差pd。其中也有一些重写的方法(如Calspeed,Calux,display)。
5.其中开关Switch,分档调速器SplitGovernor,连续调速器Continuous则分为输入电压inputpd,输出电压outputpd。输入电压固定为220,输出电压则由2说明得出。
6.设备都接上comparable接口进行排序,按顺序进行输出。

大作业六:

设计思路:
1.主线路外的串联电路,先匹配以#T开头的,在进行二次匹配去找这行是否有OUT的,找到了则知道这行串联为某并联里的电路。并将所有串联电路均放在一个ArrayList中。
另外每个串联Line类中有求总电阻的方法,如果该行只有一个开关,则判断是否为短路还是断开,此情况算出的该路总电阻,电压均为0;其他则是要将开关放到一个Arrayist中,判断所有开关是否闭合,如果该路没有开关,则正常进行计算。该路如果为正常通路,则每个设备的电压则是由该设备电阻除以总电阻乘以该路总电压进行计算得到的。

2.找到并联电路,jiang匹配到的T\d去找1中所提及的ArrayList中的电路,找到了之后再创一个ArrayList去储存该并联电路中的所有线路。该并联电路中还有计算总电阻的方法,首先去判断每条路上的电阻是否为0,如果不为0,则正常将其的电阻带入计算,为0的话则忽略。该并联电压为每条路(正常通路)上的总电压。

3.匹配主线路,先找开关,分档调速器或者连续调速器,对总电路进行电压计算,然后读取总分路上的各个设备,如果匹配到了开关,则判断开关状态,之后也是将总电路的电阻算出,每个设备的电阻除以总电阻就得到了各个设备分到的电压,之后就是将电压带进去计算,输出每个设备的信息。

类图:

3-踩坑心得

1.大作业四中用到comparable接口时把大小搞反了,本来是从小到大输出,结果按从大到小输出了。

2.大作业五中忽略了只可能有一种设备的情况,导致后面为其创建对象时有一个对象为空,不能进行正常计算。

3.设计思路一开始运用到了两个引脚,后面发现不需要两个引脚也能输出。

4在使用继承时没有将串联并联也设置为Device的子类,导致后续无法计算电阻。

5.如果匹配到了开关一定要判断是哪条线路上的开关,因为不判断的话后续就无法根据开关对该路进行情况判断,所以每一条串联上都需要一个ArrayList去存放开关类。

6.细节问题,要先将开关,分档,连续调速器的情况先处理完,然后再去算每一条串联的电阻,再去算每一条并联电路的电阻,一步一步来,不能随便算,要不然很容易将逻辑搞混。

7.再计算完毕每一条并联电路的电压时一定要为其中的每一条串联电路赋电压值,每条串联电路也是同样为每一个设备赋值,要不然后续有些设备输出为空。

4-改进建议

在大作业六中并没有判断该路是否为短路的情况,所以在后续大作业中我应该加一些判断短路断路的情况,另外正则表达式的用法也需改进,发现前几次因为正则表达式使用不当导致信息无法正常输入,数据也无法提出和赋值,所以在后续的代码改进中会仔细将正则表达式构思清楚,另外一些接口的使用,抽象方法的重写也应该改换,要不然后续检查的时候很难查出问题。再后续添加了窗帘和互斥开关后,我认为窗帘由于是根据光的强度来判断打开程度,所以不妨将日光灯和白炽灯作为窗帘类的一种属性,而互斥开关的两条路分别作为两条串联电路,而具体指向哪条则根据正则表达式来对信息进行读取。

心得:一定要先构思,先构思,先构思,不要先编码,要不然后续找逻辑错误很难找,边写代码边构思出的代码很不完善,再后续找错中可能要大改,缝缝补补很浪费时间和精力。

5-总结
1.题目难度还可以,就是在第六场大作业中没有测试点的提示就需要花大量的时间去想会不会还有其他可能的测试点,如果没有想到的话测试点基本是过不了。

2.老师上课都会讲对题目的一些思路,我觉得这方面做得很好,要不然有时候挤破头想到的一点思路可能都是不完全正确的思路就很磨人。

3.学习到了继承更升入的方法和多态的使用,可以灵活掌握接口的使用方法,例如comparable的排序,另外再使用ArrayList时也知道将类型设置为父类,然后添加子类对象也可以照常遍历子类对象并调用子类中重写分类的方法达到目的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/720793.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

The University of Sydney

QS大学排名QS世界大学排名 QS大学学科排名 QS亚洲大学排名 QS商科硕士排名 QS就业竞争力排名 QS全球MBA排名软科ARWU大学排名 泰晤士大学排名 USNEWS大学排名 金融时报(FT)商学院排名 EduRank大学排名 CWUR世界大学排名 武书连大学排名 校友会大学排名 登录 去除广告?下载大…

QS世界大学排名 2025

大学排名 发现 展会活动 留学准备 申请 职业发展中文免费注册排名方法什么是QS之星? QS世界大学排名 2025通过2025年的QS世界大学排名,发现世界顶尖大学。展开In partnership with 排名榜单 排名指标 年份 2025…

chrome浏览器被360导航劫持解决办法

右键单击桌面浏览器图标 点击属性 修改目标,去点360的导航url,ok

读AI未来进行式笔记04数字医疗与机器人

读AI未来进行式笔记04数字医疗与机器人1. 数字医疗 1.1. 20世纪的“现代医学”得益于史无前例的科学突破,使得医疗的方方面面都得到改善,让人类预期寿命从1900年的31岁提高到2017年的72岁 1.2. 现有的医疗数据库和流程将实现数字化 1.2.1. 患…

linux启动

1. BIOS BIOS 代表基本输入/输出系统。简单来说,BIOS 会加载并执行主引导记录 (MBR) 引导加载程序。 首次打开计算机时,BIOS 首先对 HDD 或 SSD 执行一些完整性检查。 然后,BIOS 搜索、加载并执行引导加载程序,该程序可以在主引导记录 (MBR) 中找到。MBR 有时位于 USB 记忆…

Grid布局

目录Grid布局概述Grid 布局和 flex 布局网格布局的属性容器和项目网格轨道网格线 Grid布局 概述 Grid 布局即网格布局,目前css布局方案中,网格布局可以算得上是最强大的布局方案了。它可以将网页分为一个个网格,然后利用这些网格组合做出各种各样的布局。比较擅长将一个页面划…

产品功能架构图

产品功能架构图的绘制可以帮助团队更清晰地了解产品的功能结构,有助于沟通和协作。它也可以用于指导产品开发过程,帮助开发团队更好地理解产品需求和功能实现方式。现实情况是,很多产品初期都是在公司阶段,非常的模糊,这个时候boss让你画个产品架构图,你很抓瞎,大千UI工…

GPU与DSA架构分析

GPU与DSA架构分析GPU、GPGPU、DSA、FPGA、ASIC等AI芯片特性及对比GPUGPU(Graphics Processing Unit,图形处理器)是一种专门用于处理图形和图像的处理器。它是计算机的重要组成部分,主要用于加速图形和图像的处理和渲染。与传统的中央处理器(CPU)相比,GPU具有更多的并行处…

k8s组件和网络插件挂掉,演示已有的pod是否正常运行

环境 03 master ,05 06是node[root@mcwk8s03 mcwtest]# kubectl get nodes -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME mcwk8s05 Ready <none> 58…

W801单片机入门开发环境设置

W801单片机入门开发环境设置开发软件下载 烧录工具和SDK 在 WinnerMicro的网站 https://www.winnermicro.com/html/1/156/158/558.htmlch340 USB串口驱动 如果没有的话 https://www.onlinedown.net/soft/1164748.htm开发用的IDE CDK 在平头哥的网站 https://www.xrvm.cn/soft-t…

嵌入式笔记5.1 定时器详解

目录一、SysTick——系统节拍定时器1. 信息介绍2. 功能介绍(工作模式)3. 寄存器介绍4. 使用方式5. 其他信息二、RTC——实时时钟1. 信息介绍2. 寄存器详解0. 寄存器地址1. RTC 时间寄存器(RTC_TR)2. RTC 日期寄存器(RTC_DR)3. RTC 亚秒寄存器(RTC_SSR)4. RTC 初始化控制…

嵌入式作业5.1 定时器编程

目录SysTick代码编写步骤程序代码运行效果RTC程序代码运行效果注意1. 代码问题2. 闹钟设置问题TIMPWM程序代码运行效果代码分析(设计思想)注意代码错误为什么使用 GPIO 输入寄存器读取 TIM 输出比较模式输出的电平其他输入捕获程序代码运行效果 SysTick 利用 SysTick 定时器编…