java第一次到第三次大作业总结

目录:
一、关于面向对象
二、三次大作业设计
** 2.1相关知识**
** 2.2类图+大作业实现讲解+大作业时序图**
三、三次大作业中踩坑心得
四、修改建议
五、总的心得体悟

一、关于面向对象:
这个学期是我们第一次接触面向对象的这个概念,在接触java之前,我们所用到的基本上都是面向过程的。虽然在小规模代码上,面向过程比较方便简单,但代码量大起来之后,面向过程就没有这样方便了,同时,面向对象在迭代上有很大的优势,只需要在对应的类中增加功能即可。
三次大作业设计
第一次大作业:第一题相关知识:类的初步实现,私有域的设置,无参构造和有参构造
第二题相关知识:类的初步实现,私有域的设置,无参构造和有参构造
第三题相关知识:类的初步实现,类的数组的使用,学生信息的封装
第四题相关知识:关联类
第五题相关知识:类的初步实现(包括题目类、试卷类、答卷类的设计与实现)、私有域的设置、方法的定义与调用(各类中的方法定义及在程序中的调用)、对象的创建与使用(创建题目类、试卷类、答卷类的对象并进行操作)。
第二次大作业:第一题相关知识:类与类之间的排序,类详细变量的查找
第二题相关知识:类与对象的实现
第三题:简单类的实现与代码补全
第四题:相关类的代码的迭代
第三次大作业:第一题:私有变量与封装
第二题:正则表达式判断题目格式
第三题:正则表达式判断输入是否合法,类的迭代
二、三次大作业作业设计
2.1类图
一次大作业:第一题

第二题

第三题

第四题

第五题

首先,在这个题目当中名为设计了一个Timu类,用于存储详细题目的信息(包含题目编号:number,题目内容:neir和题目的标准答案:answer),在这个Timu类中我定义了三个方法,分别是gettimu,getnumber,pd用于获取带Timu类中的值,pd是检验正确后的输出,方便后续代码的验证和值的打印校对。
然后我设计一个Exam试卷类,用于存放答卷的信息,答卷类中有一个timu数组就是用于存放题目信息的,该类中存在一个addtimu方法,将接收到的题目存到Timu数组当中,一个px的方法(因为我接受到的是从0开始的,所以出现题目顺序颠倒的情况,会输出不一样的结果,所以我加了一个排序,不过这玩意我应该在第一次就把他改成按照题号顺序接收的,后面迭代的时候这一处代码算是败笔,花费了大量时间修改,在第三次迭代的时候,这串部分的逻辑一直不过,最后想推到重来的时候已经来不及了),这里的Exam类和Timu类之间的关系是聚合
同时还有一个Dajuan类,这个类主要用来是处理答卷相关信息和操作的,在这个类定义类一个Shijuan类型的变量,用来存储试卷相关的信息,用来校验答卷里面的答案是否正确。并且定义了一个Boolean数组类型的,用来存储运算结果,这里面有一个方法是saveanswer,用来保存答案,再定义一个checkanswer方法,用来检验dajuan中的答案是不是与timu中的答案一致。再定义一个printQuestionAndAnswer和 printResults方法来打印结果
时序图:

第二次大作业:
第一题
第二题
第三题
第四题
这一次大作业是在上一个大作业的基础上的一个迭代,因为这个时候还不是很了解正则表达式,所以我进行输入的时候没有采用正则表达式的形式,而是采用一遍一遍循环遍历,然后用startWith来判断输入的类型,如:
Timu类在上次的基础上并没有什么变化,Exam类取消掉了排序方法,因为这一次排序不是按照Timu中的编号来的,所以不在这个类中使用排序,这一次迭代,新增加了一个SJ类,用来存储代表试卷号的试卷,SJ类中有sjnum,fs[],t[],sum.sjnum是用来记录有多少张试卷,t[]数组用来记录试卷对应试卷的对应的题号,fs[]是用来记录该题号的分数的,sum用来记录总分
Timu类中一共两个方法,一个是addsum(),用来将该试卷中的所有分数相加,最后来判断是不是满足100分,另外一个是getfs(int i),这个方法能够将对应题号的分数返回,用于获取正确分数的题号。
这一次的Dajuan比起第一次新增了一个方法,是sumfs(),用来将正确题目的分数相加并输出,如图所示:

时序图:

第三次大作业:
第一题
第二题
第三题
这一次迭代在上一次迭代的类的基础上,我新增了一个学生类,还是从Timu类开始看,在这一次的Timu类当中,因为需要用到删除功能,所以对Timu类进行了一定的修改,新增加了一个方法changetimu(int num),用来针对删除时找不到值的timu,如图所示,

同时,为了符合删除题目的要求,对SJ类也进行了一定程度上的修改,新增了一个方法,用于将删除对应的题号的分数归零。新增了一个changefs()的方法,将fs数组对应的值赋值为0。
新增学生来,来符合对于#X的输入,Student类中一共有三个三个变量,一个是存储学号的String数组,一个是存储姓名的String数组,一个记录学生数量的int类型,该类中只有一个方法,findxuesheng(String line),用于查找对应学号的人以及输出。
Dajuan类中新增删除题目的方法deletetimu,用来删除所输入的题目,如图所示:

判断输入是什么内容的时候我也是采用上一次相关的方法,采用循环获取,但这也有个问题,这一次的测试点中存在三个不满足正常输入的测试点,因此还需要增加一个不满足正常输入的判断。如图:

同时,这一次的输入用到了正则表达式,需要使用正则表达式来进行输入的判断。如图:

时序图:

三次大作业踩坑心得
第一次大作业踩坑心得:因为第一次作业中,我是直接按照输入的顺序接受题目来进行存储的,所以就会造成最后输出的题号顺序不一样,因此我增加了一个排序,来对接受到的题号进行排序,排序完后再按照顺序输出,当时本来以为用这个方法能通过后面的迭代的,但在第二次迭代就换了排序的规则,同时,第三次中这个方法暴雷了,最后想重新整理自己的代码,但因为时间来不及,最后没能修改成功。
第二次大作业踩坑心得:这一次大作业给的时间比较丰富,在这一次大作业中,我踩的坑是打乱输入的顺序,原先的的代码只能老老实实按照顺序输入才能起到作用,但这一次迭代中,有测试点是会打乱顺序的,解决方法:我采用了遍历加startWith的方式来采用判断,第一次循环将#N:开头的一个一个存储到试卷当中,第二遍循环将#T的存储到新定义的SJ类当中,第三遍循环处理最终的函数
第三次大作业踩坑心得:这一次大作业踩了蛮多坑的,首先第一坑是输入要用正则表达式,不然很多输入不合规的样例点过不去,其次,这一次的输入还增加了一个所有输入都不满足条件的情况,因此单单使用上一次的输入不能直接满足条件,应该再增加一个判断。同时,在这一次作业中我也遇到了特别难修改的一部分,那就题目中题号对应试卷中对应的不一致,如图:

当出现这种情况的时候,无法得到有效的答案,因此这个测试点过不去,等想要重新建构这部分代码的时候已经来不及了。

改建建议
1.将这种循环读入判断,从而写进对应类改进成一遍循环,比如这种:

可以将其改成一遍循环,循环后将对应的存入对应的类,减少循环数量
2.将整体输入写进新的类中,减少主函数的负担
如下所示

3.将存入题目的逻辑一开始写好,避免后续迭代造成代码越来越复杂
总结
通过这三次的大作业,我学习到了很多的东西,首先就是java中面向对象的思想,在之前我们写代码基本上是采用面向过程的方法,但通过这几次的实验,我基本上掌握了如何使用面向对象的方法进行编程,学会了面向对象中的设置私有域,学会了面向对象过程中如何通过set,get的方法进行访问,同时,通过这一次的学习,我还学会了java中如何进行链表的编写,并且这几次学习,让我加深了对正则表达式的认识。同时,更加深刻地让我感受到了java在迭代上面的优势。并且通过这几次大作业的学习,我对java中类的封装,继承,组合,聚集等关系的认识也更加地深刻了。在这几次代码迭代的过程中,我还学会了在写java之前应该首先对类进行设计,设计完后绘制是时序图,不然就很容易像我的代码当中,一旦前几次某个地方出现了问题,那么在后续迭代的过程当中,不刻意修改的话,代码量上去之后再一次进行设计就不是一件简单的事情了。

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

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

相关文章

摄像机实时接入分析平台视频分析网关烟火检测在校园消防安全场景中的应用

随着人工智能技术的不断进步,视频分析网关烟火检测的应用为校园消防安全带来了巨大变革。通过实时接入摄像机视频流,结合先进的烟火检测算法,这一平台不仅极大地提升了火灾预警的准确性和响应速度,还为校园安全管理提供了一种全新的智能化解决方案。 在校园消防安全场景中,…

CPython逆向实战分析

Python代码转换为C代码的时候,将会大大增加框架代码量。先有正向,再有逆向,写一个简单的pyx文件,.pyx文件是由 Cython 编程语言 “编写”而成的 Python 扩展模块源代码文件。写一个 setup.py文件,使用命令开始编译。Python代码转换为C代码的时候,将会大大增加框架代码量。…

场景题:百万数据插入Redis有哪些实现方案?

在面试的过程当中,偶尔会遇到一些场景题,虽然这些场景题归根到底还是技术问题,但他通常比常规的八股题要稍微难一些,因为他考验的是你对于技术的整体理解、应用,以及变通的能力。 那么今天咱们就来看一道,在面试中国平安时遇到的一道场景题:将百万数据插入到 Redis,有哪…

PbootCMS 404 错误解决方法

对于 PbootCMS 系统,404 错误出现的原因确实通常有以下两种情况:当前栏目调用的页面模板不正确,导致链接不存在:解决方法:进入后台管理,导航至“栏目管理”。 检查各栏目的模板设置,确保每个栏目都正确关联了对应的模板文件。 如果发现有栏目调用了不存在的模板文件,可…

BOS同步后进入应用提示“F_VTR_FORBIDDERID”,“F_VTR_FORBIDDATE无效”

原因: 同步反写规则业务对象未成功创建字段 解决:执行以下脚本 ALTER TABLE T_BF_WRITEBACKRULECUST ADD [F_VTR_FORBIDDERID] [INT] NOT NULL DEFAULT 0ALTER TABLE T_BF_WRITEBACKRULECUST ADD [F_VTR_FORBIDDATE] [DATETIME] NULL

如何在C语言中进行数据加密

## 如何在C语言中进行数据加密 在讨论C语言中的数据加密时,我们首先需要明确两个核心观点:使用加密库、实现自定义加密算法。其中,使用加密库是最直接且高效的方式,因为这允许开发者利用已经广泛测试和验证的加密算法来保护数据的安全性,而无需深入了解加密算法的内部工作…

使用Lucene.net来进行索引和检索

1.去 http://lucenenet.apache.org/ 下载lunece.net 文件 2.在项目添加引用Lucene.Net.dll class Program{static void Main(string[] args){//索引Directory direcotry = FSDirectory.GetDirectory("LuceneIndex");Analyzer analyzer = new StandardAnalyzer();I…

CSS Grid与Flexbox有何不同

CSS Grid与Flexbox的不同点:1. 定位方式不同;2. 维度不同;3. 主轴与交叉轴不同;4. 对齐方式不同;5. 元素排序不同;6. 应用场景不同;7. 自适应性不同等。Flexbox(弹性盒子模型)主要用于一维布局,即在行或列的方向上布局,Grid(网格布局)适用于二维布局,可以同时定义…

Gradle 7.0都有哪些新特性

Gradle 7.0引入了许多新特性和改进,主要包括:1、支持Java 16;2、性能改进;3、依赖管理改进;4、类型安全的项目访问器;5、移除已废弃的特性和API。特别的,依赖管理改进是本次更新的一个重点,通过减少模糊性,使得构建更加可预测和可维护。Gradle 7.0正式支持Java 16作为…

2024-10-25_Fri_15:06 - 中层管理:1以身作则

2024-10-25_Fri_15:06 - 中层管理:1以身作则 2024-10-25_Fri_13:20 - 以身作则是传递价值观的唯一方法! 2024-10-12_Sat_21:22 - 父母真正教育孩子的是途径 - 言传身教-以身作则 ‍ 2024-10-25_Fri_15:06 - 中层管理:1以身作则 2024-10-25_Fri_14:55 - 中层管理:2提升领导技…

Linux系统上nacos崩溃故障分析

前言:本月 21 日,公司的一个海外项目业测环境中的 Nacos 遭遇重大问题,竟意外 “宕机” 了。遗憾的是,这个项目并未配置监控系统,还是由负责的日本运维人员在上班时间发现并予以通告。而近日,我一直忙于搭建某项目的云监控平台,实在分身乏术。领导遂安排一位同事前去处理…

win11 使用hyper-v创建虚拟机

参考链接:在 Windows 上配置网卡多个 VLAN、多个虚拟网卡、实现单线多拨网速叠加(无需驱动支持) | Kenvixs Blog Set-VMNetworkAdapterVlan (Hyper-V) | Microsoft Learn 官网说明文档 【Windows使用】之--Hyper-V网络配置和虚拟交换机的使用-v林羽 常用虚拟机工具: virtua…