题目集1~3的总结
一:媒介:1.知识点:主要包罗类和对象的使用、数据封装、方法的定义和使用、数组操纵、字符串处理、以及基本的输入输出操纵,每次题集的最后一题对于字符串的处理的要求都比较过细,有很多需要考虑的细节,这部门在背面详细介绍。
2.题量:每次题目集的题目量都比较适中,不多不少
3.难度:除了最后一题外难度都比较适中,最后一题的难度较大,每次都要7.8小时及以上
二:设计与分析:
第一次作业:
答题判题程序-1:本题要求实现一个简单的答题判题程序,包罗题目的输入、试卷的输入,答案的提交、以及答案的校验和输出。
解题思路:设计了四个类:
Question 类
属性:number(题目编号)、content(题目内容)、standardAnswer(标准答案)
方法:构造函数、getter方法、checkAnswer方法用于查抄答案是否精确
功能:体现一个题目,包含编号、内容和标准答案,并能查抄给定的答案是否精确
Exam 类
属性:count(题目数量)、questions(题目数组)
方法:构造函数、judgeAnswer方法用于判断特定题目的答案是否精确、saveQuestion方法用于保存题目
功能:体现一次考试,包含多个题目,并能对答案进行校验
AnswerPaper 类
属性:exam(考试对象)、answerList(答案列表)、judgeList(答案校验效果列表)
方法:构造函数、check方法用于查抄特定题目的答案是否精确、output方法用于输出题目、答案和校验效果
功能:体现一份答题卡,包含答案和校验效果,并能输出这些信息
Main 类
方法:main方法,程序的入口点
功能:读取题目和答案,创建考试和答题卡对象,然后输出答案和校验效果
代码流程分析
读取题目数量:通过Scanner读取题目数量n。
读取题目信息:循环读取n个题目的信息,包罗编号、内容和标准答案,并创建Question对象保存到Exam对象中。
读取答案:读取答案信息,并通过split方法分割成数组。
创建答题卡对象:使用考试对象和答案数组创建AnswerPaper对象。
输出答案和校验效果:调用AnswerPaper对象的output方法输出题目、答案和校验效果。
类图
https://img2024.cnblogs.com/blog/3480565/202410/3480565-20241025140607158-578069612.png
第二次作业:
答题判题程序-2:实现了一个考试体系,涵盖了题目管理、考试管理、成绩管理和门生答案管理等功能
解题思路:设计了十个个类:
Question 类
属性:
int number: 题目编号
String content: 题目内容
String StandarAnswer: 标准答案
方法:
构造方法和 checkAnswer 方法用于查抄门生的答案是否精确。
功能:体现单个题目。
QuestionList 类
属性:
Question[] questionsList: 存储题目的数组
方法:
saveQuestion: 保存题目到数组中。
功能:管理题目列表。
Exam 类
属性:
int id: 考试编号
Question[] questions: 存储考试题目的数组
方法:
addQuestion: 向考试中添加题目。
judgeAnswer: 判断门生的答案是否精确。
功能:体现一次考试。
Examlist 类
属性:
Exam[] examList: 存储考试的数组
方法:
saveExam: 保存考试到数组中。
功能:管理考试列表。
sco 类
属性:
int scoredata: 分值
int id: 题目编号
功能:体现每道题目的分值。
Score 类
属性:
int totalScore: 总分
sco[] scores: 存储分值的数组
方法:
save: 保存分值并更新总分。
功能:管理考试的分数。
ScoreList 类
属性:
Score[] scoreList: 存储分数的数组
方法:
saveScore: 保存分数到数组中。
功能:管理分数列表。
AnswerList 类
属性:
String[] StudentAnswers: 存储门生答案的数组
方法:
saveAnswers: 保存门生答案。
功能:管理门生的答案。
AnswerPaper 类
属性:
AnswerList[] AnswerPapers: 存储答卷的数组
方法:
saveAnswerPaper: 保存答卷。
功能:管理所有答卷。
Main 类
功能:程序入口,负责调用数据输入、分数判断和答卷比较的功能。
数据流分析
输入数据:
使用 Scanner 读取输入数据,支持题目、考试和门生答案的输入。
数据格式通过特定的前缀(如 #N:、#T:、#S:)进行区分。
数据处理:
通过 extractContent 方法提取题目内容、答案等信息。
将提取的数据封装到相应的类中(如 Question、Exam、Score 等)。
分数判断:
judgeScore 方法查抄每份试卷的总分是否为100,并输出相应信息。
答卷比较:
comparePaper 方法遍历门生的答案,比较每道题目的答案是否精确,并输出分数。
类图
https://img2024.cnblogs.com/blog/3480565/202410/3480565-20241025165022594-1679412166.png
第三次作业:
答题判题程序-3:实现了一个考试体系,涵盖了题目管理、考试管理、成绩管理和门生答案管理等功能
解题思路:设计了八个类
类设计分析
Question 类
属性:
int number: 题目编号
int score: 题目分数
int getscore: 门生获得分数
String content: 题目内容
String StandarAnswer: 标准答案
int flag: 题目有用性标志
方法:
构造方法和 checkAnswer 方法用于查抄门生的答案是否精确。
QuestionList 类
属性:
Question[] List: 存储题目的数组
方法:
saveQuestion: 保存题目到数组中
Exam 类
属性:
int id: 考试编号
Question[] questions: 存储考试题目的数组
int totalScore: 总分
方法:
addQuestion: 向考试中添加题目。
judgeAnswer: 判断门生的答案是否精确。
ExamList 类
属性:
Exam[] exams: 存储考试的数组
方法:
saveExam: 保存考试到数组中。
Student 类
属性:
String sid: 门生编号
String sname: 门生姓名
StudentData 类
属性:
Student[] sList: 存储门生的数组
方法:
saveStudent: 保存门生到数组中。
AnswerPaper 类
属性:
int Aid: 答卷编号
String Sid: 门生编号
String[] answers: 存储门生答案的数组
int[] ids: 存储题目编号的数组
方法:
saveAnswer: 保存门生答案。
setid: 设置答卷编号和门生编号。
DeleteQues 类
属性:
int[] deles: 存储要删除的题目编号的数组
方法:
savedel: 保存要删除的题目编号。
类图
https://img2024.cnblogs.com/blog/3480565/202410/3480565-20241025173453166-1506035903.png
数据流分析
输入数据:
使用 Scanner 读取输入数据,支持题目、考试、门生和答卷的输入。
数据格式通过特定的前缀(如 #N:、#T:、#S:、#X:、#D:)进行区分。
数据处理:
通过 extractContent 方法提取题目内容、答案等信息。
将提取的数据封装到相应的类中(如 Question、Exam、Student 等)。
删除题目:
DeleteQuestion 方法根据删除列表 DeleteQues 删除题目。
分数判断:
JudgeScore 方法查抄每份试卷的总分是否为100,并输出相应信息。
答卷比较:
CompareAnswer 方法遍历门生的答案,比较每道题目的答案是否精确,并输出分数。
三:采坑心得:
第一次作业:
1.在处理字符串,提取题目的编号,内容,标准答案时出错
代码如下:
https://img2024.cnblogs.com/blog/3480565/202410/3480565-20241025142723884-148384823.png
使用indexOf记录#N:,#Q:,#A:,然后用substring提取#N:到#Q:,#Q:到#A:,#A:之后的内容时出错,未考虑#N:本身的长度,导致提取的内容出错
测试时报错如下:
https://img2024.cnblogs.com/blog/3480565/202410/3480565-20241025143314991-2027204785.png
剖析:这个非常 java.lang.NumberFormatException 发生在尝试将字符串转换为整数时,如果字符串不是有用的整数格式,就会抛出这个非常。代码中,非常是在 Main 类的 main 方法的第88行抛出的,这是因为 Integer.parseInt 方法接收了一个不能剖析为整数的字符串。根据非常信息 For input string: "#N:1",我们可以看到问题出如今尝试将字符串 "#N:1" 转换为整数时。这个字符串显然是不符合整数格式的,因为它包含了非数字字符。
要解决这个问题,需要确保传递给 Integer.parseInt 方法的字符串只包含数字。
代码修改后:
https://img2024.cnblogs.com/blog/3480565/202410/3480565-20241025143755413-677761594.png
这次代码在使用indexOf时,加上了#N:本身的长度,这样用substring提取的数据就是准确的
2.未考虑题号顺序与输入顺序不同
导致答案校验的效果错误
输入:
2
//#N:2 #Q:1+1= #A:2
//#N:1 #Q:5+5= #A:10
//#A:10 #A:2
//end
预计输出:
5+5=~10
1+1=~2
true true
实际输出:
1+1=~10
5+5=~2
false false
修改代码,在保存题目和校验答案输出时,按照题号来对应答题卡中的答案,然后给出相应的的输出
第二次作业:
1.未考虑到答卷可以为空,(#S:2)
https://img2024.cnblogs.com/blog/3480565/202410/3480565-20241025170608040-514238705.png
这样提取到的a是错误的无法转化为int范例
报错如下:
https://img2024.cnblogs.com/blog/3480565/202410/3480565-20241025170619193-614379717.png
这个非常 java.lang.NumberFormatException 发生时,通常意味着尝试将一个空字符串或非数字字符串转换为整数。在您提供的代码中,非常是在 Main 类的 InputData 方法的第218行抛出的,这通常是因为 Integer.parseInt 方法接收到了一个空字符串或者不包含有用数字的字符串。
修改代码:
https://img2024.cnblogs.com/blog/3480565/202410/3480565-20241025170800033-1184245731.png
增加一个判断,答卷是否为空,若为空答卷的编号则为#S:背面的字符,若不为空为为#S: - #A:之间的字符,然后再转换为int范例
https://img2024.cnblogs.com/blog/3480565/202410/3480565-20241025171225196-502672572.png
同时增加对答案的判断,若不为空则保存
第三次作业:
1.未考虑到输入的字符串的格式错误,将错误的内容存储
导致答案错误
https://img2024.cnblogs.com/blog/3480565/202410/3480565-20241025174243352-512388274.png
增加正则表达式来判断输入的字符串格式是否精确
https://img2024.cnblogs.com/blog/3480565/202410/3480565-20241025174409541-2048214298.png
2.在增加了正则表达式之后,未考虑到,空缺卷 没有答案的试卷,答案为空字符等问题,导致在提起信息并存储的时间出错,然后在背面校验答案时出现数组越界的错误
修改正则表达式,并在处理数据时增加对空缺卷等情况的判断
https://img2024.cnblogs.com/blog/3480565/202410/3480565-20241025181742415-512907076.png
https://img2024.cnblogs.com/blog/3480565/202410/3480565-20241025181748424-350644240.png
3.在处理无效的试卷引用时,一开始考虑的是遍历答卷,来判断试卷是否有对应的答卷导致错误,
背面修改为遍历试卷,看是否有与答卷匹配的试卷。并且增加对答卷是否存在的判断
https://img2024.cnblogs.com/blog/3480565/202410/3480565-20241025175323835-1656965596.png
用flat来记录是否有匹配的试卷,并用brr记录所匹配到的试卷的编号
四:改进发起:
第一次作业:
非常处理:代码中没有对输入进行非常处理,例如输入的不是整数或者输入的格式不精确。应该添加非常处理来确保程序的健壮性。
输入验证:在读取题目和答案时,应该验证输入的合法性,例如题目编号是否重复,答案是否为空等。
代码重构:AnswerPaper类的output方法中,输出题目和答案的循环可以归并,减少代码的重复。
数据结构优化:Exam类中的questions数组使用编号作为索引可能不是最优选择,因为编号可能不是一连的。可以考虑使用HashMap来存储题目。
代码清晰性:Main类中的main方法过长,可以考虑将其拆分为几个小方法,每个方法负责一个特定的功能,以进步代码的可读性和可维护性。
第二次作业:
非常处理:增加输入验证和非常处理,确保输入数据的格式精确,制止程序瓦解。
数据结构优化:使用 ArrayList 替代数组,以便动态管理题目、考试和答案的数量,制止频繁的数组复制。
代码重构:将重复的代码提取为方法,增加代码的可读性和可维护性。
第三次作业:
改进建媾和前两次一致
五:总结:
本阶段的三次题目集涵盖了Java编程的多个方面,包罗面向对象编程、数据结构、非常处理、正则表达式、输入输出处理等。
通过这三次的题目,我学会了数组的动态增长,对字符串的处理,split,trim,substring,indexof等方法,学会了面向对象的思想,
接下来应该深入学习Java集合框架,包罗List、Set、Map等接口及实在现类,了解它们的用途和性能特点,还需要学习非常处理:
学习如何自定义非常,并在代码中公道使用try-catch-finally块来处理非常。
学习心得:在写题时不能看个大概就直接开始写,应该在反复阅读题目设计好解题思路,画出浅易的类图后开始写。
不然在背面调试代码改错时会花费大量时间
发起及意见:希望老师在上课时多讲一些背面大作业可能需要用到的语法和技巧,同时发起能够给出大作业中所有的测试点,有的时间一个测试点需要猜几个小时。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]