第一次博客作业

目录
*前言*

*知识点*

*蓝桥杯*

*设计与分析*

*踩坑心得*
*总结*
前言
这学期我们新学了一门以JAVA为编程语言的课程:面向对象设计。这门课自学性强,而且节奏快,两周布完六次回顾前八章内容作业后,开始每周一次题目集。以下是我前三次题目集的回顾。
知识点
1.面向对象设计是一种软件设计方法论,其核心概念是将现实世界的事物抽象为“对象”,每个对象都具备自己的状态和行为,并通过对象间的相互作用来完成特定的任务。

2.类设计及类间关系设计。类设计主要涉及定义类的属性(状态)和方法(行为)。在设计类时,我们通常会遵循一些基本原则,如单一职责原则、开放封闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则有助于我们设计出高内聚、低耦合的类,提高代码的质量和可维护性。类间关系设计主要涉及类与类之间的交互和协作方式。在面向对象编程中,常见的类间关系包括继承、实现、依赖、关联、聚合和组合等。这每一个类就像c语言里的小程序一样,可以处理自己负责的数据并传递数据,类间关系设计则是把他们连接到一起来得到需要的输出等等。这也说明了JAVA语言比c语言更庞大也更细节,在设计较大的面向对象的程序时一般都用JAVA语言。

3.正则表达式。正则表达式是一种强大的文本处理工具,它使用一种特定的语法模式来描述、匹配和查找字符串中的字符组合。正则表达式被广泛用于各种文本编辑器、编程语言以及搜索引擎中,用于实现复杂的文本搜索、替换和验证等操作。正则表达式的内容在书本最后的附录里,但十分重要,有用。例如匹配查找学号,电话号码等等,用的好能优化代码。

4.HashMap、ArrayList、LinkedList。HashMap 是一个基于哈希表的 Map 接口的实现。它存储键值对(key-value pairs),并且允许你使用键来检索值。ArrayList 是一个实现了 List 接口的动态数组。它允许存储重复的元素,并且可以通过索引来访问、插入和删除元素。LinkedList 是一个实现了 List 和 Deque 接口的双向链表。他们是存储处理数据的优先选择。
5.面向对象设计的三大基本原则。单一职责原则:一个类应该只有一个引起它变化的原因,即一个类只负责一个功能领域中的相应职责。如果一个类承担的职责过多,不仅会使类的设计变得复杂,还会增加理解和维护的难度。将职责分离到不同的类中,可以使类的设计更加清晰和专注。这是我们上来就学习的,是最基本的但熟练理解并运用较难。其他原则暂时未学习。
以上就是这三次题目集的知识点,三次题目集题量中等,难度较大。

蓝桥杯

在这三次题目集中间,蓝桥杯初赛举办了,我参加了大学生c语言B组的考试,一共有7个题目对算法和代码优化有不小的要求,蓝桥杯是个能锻炼我们的机会并且有可能拿奖,要多多参加。

这些经历对我们以后的面试等等有帮助,且让我们对自己的不足有了了解。

设计与分析

答题判题程序-1

设计实现答题程序,模拟一个小型的测试,要求输入题目信息和答题信息,根据输入题目信息中的标准答案判断答题的结果。

我们写第一次题目集时,没有经验所以老师在最后一题的末尾写了他的设计供我们参考使用。

题目类(用于封装单个题目的信息)

属性:题目编号、题目内容、标准答案-standardAnswer
方法:数据读写set\get方法、
判题方法(答案-answer):判断答案-answer是否符合标准答案-standardAnswer

试卷类(用于封装整套题目的信息)

属性:题目列表(题目类的对象集合)、题目数量
方法:判题方法(题号-num、答案-answer):判断答案-answer是否符合对应题号的题目标准答案-standardAnswer
保存题目(题号-num、题目-question):将题目保存到题目列表中,保存位置与num要能对应

答卷类(用于封装答题信息)

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

其余的get和set等省略。

类图中get和set省略。

第一次程序由于我以为和上学期c语言第一次作业难度差不多,所以写的时间较短,分数和理解较少。但原理就是上面的类联系起来得到结果。

答题判题程序-2

设计实现答题程序,模拟一个小型的测试,以下粗体字显示的是在答题判题程序-1基础上增补或者修改的内容。

要求输入题目信息、试卷信息和答题信息,根据输入题目信息中的标准答案判断答题的结果。

由于我们可能整体题目集写的不是太好,老师给了我们接下来的题目集的设计思路。我自己也是没有太多分,所以直接使用老师的思路。

此题目集是在第一次题目集基础上增加了功能及要求。

使用5个类,新增两个类

试卷题目类(Question_Paper 新增):用于保存试卷中的题目信息。由于试卷中的题目序 号与题目本身的题号不一致。且题目在不同试卷中的分值可能不一样,因此,设计试卷题目类。

int p_q_num;//试卷中题目的顺序号

Question question;//题目类的对象,保存题目信息

int question_score;// 题目分值

int judge_markAnswer(String answer) // 判断题目得分

答案类(Answer 新增):用于保存答卷中一道答案的信息。

Question_Paper question; String answer; boolean mark;// 每一题的正确性

int score=0;// 每一题的得分

void calScore()//计算得分

同时,3个类较上文有补充

试卷类

int sum-保存总分 (新增)

int questionQuantity-保存题目数量 (新增)

int getSum():获得总分(新增)

答卷类

void printJudges() :// 输出所有的得分以及总分,以空格分隔(新增)

类图中get和set省略。

第二次题目集新增了一些输出要求和功能。要使用HashMap或者ArrayList或者LinkedList等等,且使用正则表达式有好的效果。

答题判题程序-3

 设计实现答题程序,模拟一个小型的测试,以下粗体字显示的是在答题判题程序-2基础上增补或者修改的内容,要求输入题目信息、试卷信息、答题信息、学生信息、删除题目信息,根据输入题目信息中的标准答案判断答题的结果。
这第三个题目集发布的时间相比前两次要晚两天,给的时间也多两天。他的难度可比第二次多了不止20%,我承认这一次基本等于没做,但我还是有一些思考。
这次又新增一个类有6个类
学生类(Student)(新增):保存学生的信息 String stuNum, stuName;

题目类

(新增)boolean isValid=true;//是否是有效的题目

(新增)void disabled() //当题目被删除,设置题目为失效状态

(新增)ArrayList answers //记录所有引用了该题目的答案

       答案类
(新增)void disable() //答案对应的题目失效,判分为0分
答卷类
(新增)String stuNum;// 学号
(新增)void printErrorNumQuestion(Answer answer) // 输出试卷中错误题目 号的题目 
(新增)void printInvalidQuestion(Answer answer)// 输出失效题目信息
类图中get和set省略。

第三次测试点多增加了许多特殊情况和错误情况,需要对代码的情况做更多考虑和试错。同时还要确保类之间传递数据的不同特殊情况考虑在内。要按单一职责原则处理各个类应该处理和传递的数据。

踩坑心得

第一次题目集

第一次代码我写的较晚且没有经验,于是第一次提交以9分失败

然后,在处理输出格式上我多次尝试,详细补充

 

还是完成了第一次题目集

第二次题目集

这一次更要注意格式规范且新增了不少属性,建议用上Arrays.

 

输入格式:

程序输入信息分三种,三种信息可能会打乱顺序混合输入

这一次被这个顺序搞得报错不少,写了些代码处理分类情况

   格式约束:答案数量可以不等于试卷信息中题目的数量,没有答案的题目计0分,多余的答案直接忽略,答案之间以英文空格分隔

这使得答案不能完全与题目配对要分开处理再分别输出。

 

试卷总分警示

该部分仅当一张试卷的总分分值不等于100分时作提示之用,试卷依然属于正常试卷,可用于后面的答题。如果总分等于100分,该部分忽略,不输出。

   格式:"alert: full score of test paper"+试卷号+" is not 100 points"

   样例:alert: full score of test paper2 is not 100 points

这里要加上分数判断来处理这种情况。

第三次题目集

前面一个小问我都没过。

这里推荐用正则表达式处理年月日日期。

这个答题有多种异常输入的监测。要判断查找多种特殊情况。

我的踩坑次数不多,因为尝试的次数不多。

总结

这是第一阶段三次题目集,难度整体不小,但以后的题目集会增加更多难度和类,所以要适应快节奏,要提前学习,多问同学或老师,我第一阶段做的不好,学习效率低,且有拖延症,要改除。

我学习到了以上知识点以外还学习了如String类里一些函数的用法,可以优化代码。有一些算法需要进一步学习,还有要补充之前的不足,要学习多态和继承等等。我要分配好各种学科学习的时间,多尝试,多问别人。

posted @   病态世界  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示