嚴華 发表于 2024-10-26 20:56:24

java-BLOG-1

1.前言
第一二个标题集除了最后一个标题以及第三个标题集的第一个标题都比较简朴,只要按照标题要求,创建相应的类,标题比较简朴一般只必要创建一个类和相应的一些属性、方法,按照输入输出的要求进行创建就行。前两个标题集只必要做对相应的输出就能做对,而第三个标题集重点增加了对输入的不合法的判断,以及其对应输出。好比:第三个标题集的第二个标题。有超过1个日期不合法和第一行日期非法、第二行日期合法且有效这两个测试点,因为我用的是正则表达式,一开始就限定了范围,而导致超出的范围没办法判断,所以不停通不外。背面改了正则表达式的范围,才通过。对于这三个标题集的最后一个标题,难度大,必要创建多个类,输入和输出的格式和内容比较多,测试点多。
2.设计与分析
第一次标题集-答题判题程序-1
(1)类图
https://img2024.cnblogs.com/blog/3542331/202410/3542331-20241026132000565-1214287622.png

[*]类结构
Examination:负责初始化标题数量,并存储所有标题标判断结果。
Topic:处理每个标题标详细信息,包罗正确答案、考生答案、解题过程等,并能对答案进行评判及打印。
[*]主要功能
初始化标题数量:通过 Examination 类的 allNumber 方法从输入中读取标题总数。
读取标题信息:Topic 类的 answer 方法读取每道题的详细信息,包罗标题编号、解题过程、正确答案等。
读取考生答案:继续从输入中读取考生的答案。
评判答案:Topic 类的 judge 方法根据标题编号将考生答案与正确答案进行对比,并更新 Examination 类中的判断结果。
打印结果:Topic 类的 print 方法按标题编号排序输出每道题的解题过程和考生答案,以及最终的判断结果。
[*]输入格式
第一行输入标题总数。
接下来若干行,每行包罗一道题的信息,格式为 #N:标题编号 #Q:标题内容 #A:正确答案。
最后一行包罗考生的所有答案,格式为 #A:考生答案1 #A:考生答案2 ...。
[*]输出格式
按标题编号排序输出每道题的解题过程和考生答案,中间用 ~ 分隔。
最后一行输出所有标题标判断结果,用空格分隔。
部分心得:
由于第一次我还没利用正则表达式,所以我利用的是String类里的方法,但它有很多局限性,必须要有固定格式而且操作繁琐。在背面利用正则表达式,才发现正则表达式是真的方便。
https://img2024.cnblogs.com/blog/3542331/202410/3542331-20241026154145845-643113535.png
input.hasNextLine() 是 Java 中 Scanner 类的一个方法,用于检查输入中是否还有下一行可供读取。常用在读取文本文件或控制台输入时,通常与 input.nextLine() 方法一起利用,以确保在尝试读取下一行之前,输入流中确实还有数据。
https://img2024.cnblogs.com/blog/3542331/202410/3542331-20241026154156800-1651356396.png
利用TreeMap有一些非常方便的方法可以输出,不用本身格外写函数。
https://img2024.cnblogs.com/blog/3542331/202410/3542331-20241026213620684-355512368.png
第二次标题集-答题判题程序-2
(1)类图
https://img2024.cnblogs.com/blog/3542331/202410/3542331-20241026134237619-1794424017.png

[*]类结构
Topic:处理每个标题标详细信息,包罗正确答案、考生答案、解题过程、题号、分数等,并能对答案进行评判及打印。
Exportation:负责验证分数总和是否为100,并计算考生的总分。
[*]主要功能
读取标题信息:Topic 类的 answer 方法从输入中读取每道题的详细信息,包罗标题编号、解题过程、正确答案、考生答案和分数。
评判答案:Topic 类的 judge 方法将考生答案与正确答案进行对比,并存储判断结果。
处理输出:Topic 类的 process 方法按标题顺序输出每道题的解题过程、考生答案和判断结果。
验证分数:Exportation 类的 validateMarks 方法验证所有标题标分数总和是否为100。
计算总分:Exportation 类的 getTotalMark 方法根据判断结果计算考生的总分,并输出每道题的得分和总分。
[*]输入格式
输入以 end 结束。
[*]输出格式
按标题顺序输出每道题的解题过程、考生答案和判断结果,格式为 标题内容考生答案判断结果。
输出每道题的得分和总分,格式为 得分1 得分2 ... ~ 总分。
如果分数总和不为100,输出告诫信息。
部分心得:
这次最后一题只通过了部分测试点,成绩不高,同时这个标题是在上次标题进阶的,因为我上次利用的是数组,发现数组有局限性,每次输出时都要一个循环,而且要传这个数组的长度,并且要提前设置长度,这会导致有空余。而用列表的话,它定义了很多好用的方法,不用本身再去定义函数了,省事了很多。
https://img2024.cnblogs.com/blog/3542331/202410/3542331-20241026155048038-421827156.png
第三次标题集-答题判题程序-3
(1)类图
由于这次实验我没有留出足够的时间,导致我把所有功能写在一个类里,背面我把功能分成几个类,并重新画出类图。所以这次就不多说了。
https://img2024.cnblogs.com/blog/3542331/202410/3542331-20241026142052481-312038493.png
这次实验终于利用了正则表达式,要根据输入格式设置符合的格式。
https://img2024.cnblogs.com/blog/3542331/202410/3542331-20241026155619097-603469607.png
输入后要判断是否符合表达式,如果符合就进行操作,由于要存储数据,要用split来分隔数据,并进行储存。
https://img2024.cnblogs.com/blog/3542331/202410/3542331-20241026155824012-947054514.png
3.踩坑心得
(1)正则表达式的数据范围
String regex = "^(({4})-({2})-(0|))$";
一开始正则表达式是月份和天数是固定在12和31以内的,但输出格式是如果第一行日期字符串非法,输出自定义的错误信息。所以导致输入天数和月份超过31、12时,代码输出没反应,导致测试点没过。
(2)计算两日期之差
https://img2024.cnblogs.com/blog/3542331/202410/3542331-20241026214935922-825557267.png
如果是本身写个函数计算两个日期之间的差,是比较复杂的,可以直接利用这个代码可以轻松的算出值,非常方便。
(3)检查输入中是否还有下一行可供读取
https://img2024.cnblogs.com/blog/3542331/202410/3542331-20241026154156800-1651356396.png
如果没有以end为结尾的要求,就必要判断下一行是否有数据,可以考虑input.hasNextLine() 判断下一行是否还有数据。
(4)将String类型准换成int类型
在处理String数据时常常碰到如许的情况,要把其类型转换成int类型,可以利用Integer.parseInt()转换。
4.改进建议
我感觉本身的代码写的不够规范,做起题来思路也不够宽,所以我会多多学习尺度的规范的代码,进步本身的代码能力和阅读性。
如今在以下几个方面是可以改进的:
非常处理:增加对输入格式的检查,确保输入数据的有效性。
性能优化:在 Topic 类的 judge 方法中,可以考虑利用哈希表来存储标题编号与索引的映射,以进步查找效率。
代码复用:可以将一些重复的逻辑提取到单独的方法中,如字符串解析部分。
5.总结
正则表达式确实方便,一开始我都不是利用正则表达式,用了之后我就发现它得定义得知识点有很多,所以还必要深入学习。类与类之间得数据传输感觉把握得不是很好,常常报错,还有就是类之间经常重复定义,明明这几个类的作用是一样的,可以用一个数据直接传,而不用传多次。同时类的定义和方法还需斟酌,定义几个类,其属性和方法是什么,这是关键,也是最难的,必要终身学习。有时我发现利用了一钟模式,我会依赖它,然后碰到问题时又会利用它来解决,可又是却又不是最佳方法,可能还更繁琐,所以必要尝试不同的方法,了解其优劣和实用场景。
这几次实验我都没有拿满分,此中一个主要原因是我预留的时间不富足,所以下次实验开始我会预留足够的时间去写。夺取每次都有一个好的类的结构,整体框架清楚,逻辑严谨。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: java-BLOG-1