第一次博客作业
目录
*前言*
*知识点*
*蓝桥杯*
*设计与分析*
*踩坑心得*
*总结*
前言
这学期我们新学了一门以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
题目类
(新增)boolean isValid=true;//是否是有效的题目
(新增)void disabled() //当题目被删除,设置题目为失效状态
(新增)ArrayList answers //记录所有引用了该题目的答案

第三次测试点多增加了许多特殊情况和错误情况,需要对代码的情况做更多考虑和试错。同时还要确保类之间传递数据的不同特殊情况考虑在内。要按单一职责原则处理各个类应该处理和传递的数据。
踩坑心得
第一次题目集
第一次代码我写的较晚且没有经验,于是第一次提交以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类里一些函数的用法,可以优化代码。有一些算法需要进一步学习,还有要补充之前的不足,要学习多态和继承等等。我要分配好各种学科学习的时间,多尝试,多问别人。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)