首页 > 其他分享 >OOP第一次Blog

OOP第一次Blog

时间:2024-04-21 18:23:51浏览次数:11  
标签:题目 试卷 保存 第一次 Blog num OOP answer 题号

本次Blog总结前三次作业的心得和体会

**前言:前三次PTA作业整体难度不算很大,题量也一般,但是运用的知识点还是挺多挺杂的。
第一次:没用到什么繁琐的知识点,初步见识到类之间的关联性和耦合性,难度不大,但是比较考验耐性。

第二次:开始接触接口,用接口辅助排序,最后一道题在第一次的基础上进行了迭代,我引入了Linklist类,可以更好地操作。

第三次:这次比较考验类的封装性,最后一题经过两次迭代,类与类之间的关系更加复杂,有几个测试点没有过。

**设计与分析:

首先第一次题目都比较简单其他的都是最基本的类的构建,分析一下最后一题吧,第一次最后一题,我构建了三个类
题目类(用于封装单个题目的信息):
属性:题目编号、题目内容、标准答案-standardAnswer
方法:数据读写set\get方法、
判题方法(答案-answer):判断答案-answer是否符合标准答案-standardAnswer

试卷类(用于封装整套题目的信息)
属性:题目编号,试卷编号,题目分值
方法:判题方法(题号-num、答案-answer):判断答案-answer是否符合对应题号的题目标准答案-standardAnswer
保存题目(题号-num、题目-question):将题目保存到题目列表中,保存位置与num要能对应

答卷类(用于封装答题信息)
属性:试卷(试卷类的对象)、答案列表(保存每一题的答案)、判题列表(保存每一题的判题结果true/false)
方法:判题方法(题号-num):判断答案列表中第num题的结果是否符合试卷中对应题号的题目标准答案
输出方法(题号-num):按照题目的格式要求,输出题号为num的题目的内容和答题结果。
保存一个答案(题号-num,答案-answer):保存题号为num的题目的答题结果answer。

由于第一次这种题目,对java的封装性还是很好的掌握,写题目是破坏了类与类之间的关系。
我在答卷中搜索对应题目时,我把所有的题目都遍历了一遍,没有将这道张卷子的题目取出来
就像下面这样

我开了一个Linklist类保存所以分数,我挨个检查所以题目找到对应的编号,比较答案,然后输出。
这是很麻烦的一种做法。
但是最后也是把所有测试点过了,也没有太大问题。

然后是第二次作业,这次作业第一题我接触到了接口,用来自定义排序方式

从而达到降序的目的。
然后分析这次作业的最后一题,在第一次的基础上进行了迭代,但是改变不算很大,我没有新加类,所以简单说一下哪些改变。
这次可能会有多张答卷和试卷,所以为了我采用LinkList类型保存答卷和试卷。

使用while死循环多次输入直到end,每次分别加入对应的链表中。

然后又改变这次试卷中题目的顺序,但是这个改变没有影响,因为本就是从小到大的遍历,但是有一点不一样,题目顺序可能有空缺。
例如,1,2,4没有3。这是合法输入。
所以我在Test(试卷类)中将题目序号用LinkList类保存,排序。

这道题之后也和上次差不多了。

最后是第三次作业,这次作业第二题,学习到了日期类的基本使用方法。
创建日期对象:Date date = new Date();
格式化日期:SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");,然后使用sdf.format(date)进行格式化。
日期比较:date1.compareTo(date2),返回值表示date1和date2之间的差异。
日期计算:date1.getTime() - date2.getTime(),返回两个日期之间的时间差(以毫秒为单位)。
其他也没什么难度。
然后第三次作业最后一题,就非常让人崩溃,我这道题有几个测试点没有过。
本次新加了一个类
Student(学生类)
属性:学号,姓名。
方法:检查学生是否存在,返回String类型。

本次输入信息中引入了一种新的信息,删除信息,用LinkList类型保存了所以删除的题目。
并在题目链表中删除。

然后答卷类中也新加入了学号的新属性(String类型)
并且添加检测学号是否存在的方法、

然后还加入了错误格式检测,有多中错误格式,用正则表达式一一比对即可
String[] regex = { "^#N:\d\s#Q:.#A:.",
"^#T:\s\d+\s((\d+\s-\s\d+\s)+)$", "^#S:\s\d+\s\d+\s(.?)$",
"^#X:\s
\d+\s(.?)+(?:-\d+\s(.?)+)$", "^#D:\sN\s-\s\d+\s*$", };
然后和上次一样进行遍历比对,过程比较繁琐。
根据试卷的题目顺序,在答卷中遍历查找答案,如果没有则输出相应提示,
然后根据优先级查找问题是否被删除,如果没有就比对答案,添加分数。
如果问题被删除加入0分,输出提示。






但是最后的最后还是有三个测试点没有过去。

**踩坑心得:

正则表达式多次匹配错误,题目说的比较模糊,导致我写正则表达式时多次错误。
导致匹配失败。
例如:
"#N:(.)#Q:([ a-zA-Z0-9])#A:(.)"
"([0-9]+)[ ]
([a-zA-Z]*)"等都是匹配失败案例。

java中想要多行输入,nextInt()与nextLine()
千万千万千万不要同时使用,很可能会报错,如果要输入数字,先用String类型接收,之后转化为int类型。

多次循环过后,循环数弄反了。这是一个很崩溃的错误,因为非常难找。
好几百行代码中找这种错误真的很绝望。
例如:

逻辑错误,推荐写大作业之间用笔写下自己的逻辑和思路,不然纯靠自己脑子记住真的很容易逻辑出错,忽然混淆,java代码本身就比较繁琐,
逻辑错误就会导致之间退出代码或者无法访问。
例如:

**改进建议:
第三次作业可以通过新加一种类来优化代码
试卷题目类(Question_Paper):用于保存试卷中的题目信息。

由于试卷中的题目序号与题 目本身的题号不一致。且题目在不同试卷中的分值可能不一样,因此,设计试卷题目类。
int p_q_num;//试卷中题目的顺序号
Question question;//题目类的对象,保存题目信息
int question_score;// 题目分值
int judge_markAnswer(String answer) // 判断题目得分

这样保存了试卷与题目的关系,就不需要每一次都从所有题目中遍历。

另外还可以使用HashMap类型保存试卷中对应编号和分数,也可以简化代码。

以提高代码的质量和性能。

**总结:

对面向对象编程(OOP)概念理解加深了,Java是一种面向对象的语言,通过这三次作业,更深入地理解类、对象等概念。

然后代码组织与结构的能力增强,编写大型Java程序需要良好的代码组织和结构。

会学习如何使用接口、类组织代码,以及如何使用注释来提高代码的可读性。

调试能力提高,调试是开发过程中不可或缺的一部分。学会如何使用调试工具和技巧来定位和修复代码中的错误。

还学会了许多类的使用例如LinkList,ArraysList,HashMap等等。

然后是一些建议:
第三次的作用最后一题,仅仅是一张答卷,可以添加多张答卷,更符合实际。

之后的PTA作用可以加入一些算法数据结构的知识,促进我们自学,这几次作用都没有什么算法知识。

可以加入更多关联实际的题目,增强对面向对象的理解。

标签:题目,试卷,保存,第一次,Blog,num,OOP,answer,题号
From: https://www.cnblogs.com/Luluhaha/p/18149290

相关文章

  • blog1 1--3周PTA训练总结
    一.前言:在学习过C语言之后,面向对象的程序设计在本学期如期开启。该课程的编程语言是java,java与所学过的C语言有诸多相似之处,与C语言课程所不同的是,这门课程注重的是面向对象,如果说C语言是语法的学习,那么java就是其实战应用的学习,这门课的学习更让我深刻的感受到比写代码更重要的......
  • OOP答题判题系统1-3次总结
    一.前言1.知识点:(1)面向对象编程(OOP):这三道题目要求设计并实现题目类、试卷类和答卷类等,这涉及到类的定义、属性的封装以及方法的实现,是OOP的核心概念。(2)方式设计:设计并实现用于判题、保存题目、保存答案等功能的方法,这涉及到方法的命名、参数设计以及逻辑实现。(3)数据结构与集合......
  • 数据库原理第一次实验报告
    目录任务一:(数据库CAP)12345任务二:(数据库GlobalToyz)1234567891011121314151617181920写在最后数据库原理第一次实验报告任务一:(数据库CAP)1创建数据库CAP,包含4张表Customers、Products、Agents和Orders。UseMaster;CREATEDatabaseCAP;UseCAP;CREATETABLECUSTOMERS(......
  • oop-PTA题目集1~3总结
    一、前言在学习了Java最基础的语法以及完成五次oop课前训练集之后,我们终于步入正轨,从符合人类思维的、流程化的,但存在可复用性差等缺点的面向过程的编程方式转入面向对象编程。谈到面向对象,就不得不谈及它的三大特点:封装、继承、多态。而这三次的题目尚未涉及继承和多态,主要是实......
  • OOP面向对象编程三次题目总结
    一.前言:在这三次题目集中,最后一小题为判题程序,其余题为基础的知识点题,输入一段题目内容,试卷内容,答卷内容,评判对错情况和计算最终总分,在这三次作业的迭代下,我一次比一次做的不好,第一次是满分,第二次95,第三次只有79,即使效果不好,我还是把我的做题思路写下来供大家参考。二.三次作业......
  • 南昌航空大学软件学院23201823第一次blog
    一、前言:关于这三次的PTA大作业,我认为题目难度是超出了我的现象的,特别是每次的压轴迭代题,这压轴三道题全是迭代而来,息息相关,这也就意味着你如果第一次的设计没有做好,框架出现问题,后续改进的时候就只会越来越吃力甚至是需要把整个架构都推倒重来。最后一道题目的知识点包含也非常......
  • JAVA第一次博客
    目录:一.前言二.设计与分析三.踩坑心得四.改进建议五.总结一.前言:一开始接触的就是C语言,而后是Java。两者有相通的也有不同的,C语言面向过程,而JAVA则是面向对象。感觉JAVA的面向对象和struct有点像。第一次作业偏简单,重点在与正则表达式;第二次作业输出的形式更复杂了;第三次作业增......
  • 第一次blog
    前言:本学期我开始了Java的学习之旅,从类的学习,输入与输出,到集合与哈希表。下面是一个从类的学习开始的Java学习总结:类与对象:类是Java中的基本构建模块,它定义了对象的属性和行为。对象是类的实例,具体化了类的属性和行为。类的结构:类由类名、属性(成员变量)和方法(成员函数)组成。......
  • 第一次Blog总结-前三次答题判定程序
    目录前言设计与分析采坑心得改进建议总结关于java&面向对象因为这学期刚开始学习java,因此对于java的某些知识点或技巧掌握地不是太熟练,但是经过长达三周的折磨下,总算对java有了初步的总体认知。前言知识点覆盖:数组灵活运用,List和Map接口灵活运用,各种类的设计已经......
  • JAVA学习第一次Blog
    前段时间老师在PTA上发布了三次大作业,这几次大作业的难度都比较高,对我来说除了前面的题目,最后的大分数压轴题我每次都做不出来。这与上个学期学的C语言作业难度简直不是一个等级的,不过JAVA老师也在上课期间一直强调,“我们JAVA课程一定要做出改变,不能说怕学生挂科就把难度设置的很......