第三次博客作业

发布时间 2023-06-21 20:57:51作者: Lionel_Messi

写在前面:

为了方便各位彭于晏和迪丽热巴的阅读花了大量时间编写了目录同时也使博客架构更清晰,可以直接根据目录进行跳转。总结是按照每一道编程题一个总结,这样可以达到更具体的效果,文章末尾是对三次作业的概括性总结,博客花费大量时间希望彭于晏和迪丽热巴们认真评阅给出见解打出高分,谢谢!还有为了避免误会使用world字数有4618字(不包含题目哈!!!!),欢迎大家进行核对!!!

 

前言:

1.知识点:

课程成绩统计程序-1:

1.类关系的设计与实现

2.正则表达式的使用

3.HashMap,HashSet等容器的使用

4.使用Iterator迭代器遍历容器元素

5.使用Collator进行中文字符的比较

6.类的抽象与子类的继承

课程成绩统计程序-2:

1.实验类的设计与添加。

2.实验考核方式类的设计与添加。

3.正则表达式下多次重复内容的处理与判读。

4.使用迭代器累加实验课单次成绩并计算总成绩。

课程成绩统计程序-3:

1.继承关系修改为组合关系的使用

2.将平时成绩以及期末成绩的特定权重改为可修改式权重

3.正则表达式的处理与判断

4.使用迭代器进行数据的累加处理

5.权重的总和判断,不符合数据的输出

6.double类型数据和整形数据的比较处理

2.题量:

课程成绩统计程序-1:

本次主要是考察类的设计与构造,以及平均分的计算,但由于要用到hashmap,hashset等容器类计算平均分时要使用迭代器进行迭代,代码量还是偏大。

课程成绩统计程序-2:

本次统计程序实际上是第1次程序的迭代,添加实验课类即可,题量不高,代码量不高较易实现。

课程成绩统计程序-3:

本次统计程序将前两次中的权重进行了可修化的迭代,题量总体来说并不大,需要修改部分为正则表达式以及相关student,course,class类中的相关中处理以及成绩类结构的改变。

3.难度:

课程成绩统计程序-1:

要用到hashmap,hashset等容器类计算平均分时要使用迭代器进行迭代,代码量还是偏大的,但是逻辑便于理解实现难度不高。

课程成绩统计程序-2:

添加实验课类即可难度不高,思维难度不高,依然要使用迭代器进行成绩的叠加,可能需要另添加成绩类计算方式,难度不高,较易实现。

课程成绩统计程序-3:

题目样例的理解难度不高,但是由于给出的输出样例较少导致相关难度陡增需要自己尝试从而找出相关的规范化输出,难度因此较前两次作业来说难度是较高的。

设计与分析:

7-1 课程成绩统计程序-1

分数 100
作者 蔡轲
单位 南昌航空大学

某高校课程从性质上分为:必修课、选修课,从考核方式上分为:考试、考察。

考试的总成绩由平时成绩、期末成绩分别乘以权重值得出,比如平时成绩权重0.3,期末成绩权重0.7,总成绩=平时成绩*0.3+期末成绩*0.7。

考察的总成绩直接等于期末成绩

必修课的考核方式必须为考试,选修课可以选择考试、考察任一考核方式。

1、输入:

包括课程、课程成绩两类信息。

课程信息包括:课程名称、课程性质、考核方式(可选,如果性质是必修课,考核方式可以没有)三个数据项。

课程信息格式:课程名称+英文空格+课程性质+英文空格+考核方式

课程性质输入项:必修、选修

考核方式输入选项:考试、考察

课程成绩信息包括:学号、姓名、课程名称、平时成绩(可选)、期末成绩

课程信息格式:学号+英文空格+姓名+英文空格+课程名称+英文空格+平时成绩+英文空格+期末成绩

以上信息的相关约束:

1)平时成绩和期末成绩的权重默认为0.3、0.7

2)成绩是整数,不包含小数部分,成绩的取值范围是【0,100】

3)学号由8位数字组成

4)姓名不超过10个字符

5)课程名称不超过10个字符

6)不特别输入班级信息,班级号是学号的前6位。

2、输出:

输出包含三个部分,包括学生所有课程总成绩的平均分、单门课程成绩平均分、单门课程总成绩平均分、班级所有课程总成绩平均分。

为避免误差,平均分的计算方法为累加所有符合条件的单个成绩,最后除以总数。

1)学生课程总成绩平均分按学号由低到高排序输出

格式:学号+英文空格+姓名+英文空格+总成绩平均分

如果某个学生没有任何成绩信息,输出:学号+英文空格+姓名+英文空格+"did not take any exams"

2)单门课程成绩平均分分为三个分值:平时成绩平均分(可选)、期末考试平均分、总成绩平均分,按课程名称的字符顺序输出

格式:课程名称+英文空格+平时成绩平均分+英文空格+期末考试平均分+英文空格+总成绩平均分

如果某门课程没有任何成绩信息,输出:课程名称+英文空格+"has no grades yet"

3)班级所有课程总成绩平均分按班级由低到高排序输出

格式:班级号+英文空格+总成绩平均分

如果某个班级没有任何成绩信息,输出:班级名称+英文空格+ "has no grades yet"

异常情况:

1)如果解析某个成绩信息时,课程名称不在已输入的课程列表中,输出:学号+英文空格+姓名+英文空格+":"+课程名称+英文空格+"does not exist"

2)如果解析某个成绩信息时,输入的成绩数量和课程的考核方式不匹配,输出:学号+英文空格+姓名+英文空格+": access mode mismatch"

以上两种情况如果同时出现,按第一种情况输出结果。

3)如果解析某个课程信息时,输入的课程性质和课程的考核方式不匹配,输出:课程名称+" : course type & access mode mismatch"

4)格式错误以及其他信息异常如成绩超出范围等,均按格式错误处理,输出"wrong format"

5)若出现重复的课程/成绩信息,只保留第一个课程信息,忽略后面输入的。

信息约束:

1)成绩平均分只取整数部分,小数部分丢弃

参考类图:


image.png

输入样例1:

仅有课程。例如:

java 必修 考试
数据结构 选修 考试
形式与政治 选修 考察
end
 

输出样例1:

在这里给出相应的输出。例如:

java has no grades yet
数据结构 has no grades yet
形式与政治 has no grades yet
 

输入样例2:

单门考试课程 单个学生。例如:

java 必修 考试
20201103 张三 java 20 40
end
 

输出样例2:

在这里给出相应的输出。例如:

20201103 张三 34
java 20 40 34
202011 34
 

输入样例3:

单门考察课程 单个学生。例如:

java 选修 考察
20201103 张三 java 40
end
 

输出样例3:

在这里给出相应的输出。例如:

20201103 张三 40
java 40 40
202011 40
 

输入样例4:

考试课程 单个学生 不匹配的考核方式。例如:

java 必修 考试
20201103 张三 java 20
end
 

输出样例4:

在这里给出相应的输出。例如:

20201103 张三 : access mode mismatch
20201103 张三 did not take any exams
java has no grades yet
202011 has no grades yet
 

输入样例5:

单门课程,单个学生,课程类型与考核类型不匹配。例如:

java 必修 考察
20201103 张三 java 40
end
 

输出样例5:

在这里给出相应的输出。例如:

java : course type & access mode mismatch
java does not exist
20201103 张三 did not take any exams
202011 has no grades yet
 

输入样例6:

单门课程,多个学生。例如:

java 选修 考察
20201103 李四 java 60
20201104 王五 java 60
20201101 张三 java 40
end
 

输出样例6:

在这里给出相应的输出。例如:

20201101 张三 40
20201103 李四 60
20201104 王五 60
java 53 53
202011 53
 

输入样例7:

单门课程,单个学生,课程类型与考核类型不匹配。例如:

形式与政治 必修 考试
数据库 选修 考试
java 选修 考察
数据结构 选修 考察
20201103 李四 数据结构 70
20201103 李四 形式与政治 80 90
20201103 李四 java 60
20201103 李四 数据库 70 78
end
 

输出样例7:

在这里给出相应的输出。例如:

20201103 李四 73
java 60 60
数据结构 70 70
数据库 70 78 75
形式与政治 80 90 87
202011 73
 

输入样例8:

单门课程,单个学生,成绩越界。例如:

数据结构 选修 考察
20201103 李四 数据结构 101
end
 

输出样例8:

在这里给出相应的输出。例如:

wrong format
数据结构 has no grades yet
 

输入样例9:

多门课程,多个学生,多个成绩。例如:

形式与政治 必修 考试
数据库 选修 考试
java 选修 考察
数据结构 选修 考察
20201205 李四 数据结构 70
20201103 李四 形式与政治 80 90
20201102 王五 java 60
20201211 张三 数据库 70 78
end
 

输出样例9:

在这里给出相应的输出。例如:

20201102 王五 60
20201103 李四 87
20201205 李四 70
20201211 张三 75
java 60 60
数据结构 70 70
数据库 70 78 75
形式与政治 80 90 87
202011 73
202012 72

圈复杂度:

类图:

 

分析:

1.本题是课程成绩统计程序的第一次作业,主要是要求进行类的实现与构造。

2.在正则表达式找中需要对课程数据进行拆分,以及不合法输入的判断,例如成绩的范围是【0-100】,学号是由八位数字组成,姓名以及课程不超过10个字符,不合法输入要去统一输出“wrong format”

3.对于输入内容信息的处理判断处理,必修只能对应考试类型而选修可以对应考试以及考察。

4.使用Collator进行中文字符的排序,java自带的compare不能比较相关中文字符,需要使用Collator类覆盖Comparator中的方法。

5.使用Iterator迭代器进行数据的累加处理,再分别计算所要求的平局分,存入相关变量中。

6.使用hashmap存入课程,班级,学生数据,分别使用课程名称,班级号,学号作为key值进行检索。

7.使用hashset存入选课类,使其唯一化无重复的值。

总结:

1.通过本次课程成绩统计系统的完成加深了正则表达式的使用。

2.掌握了Collator方法进行相关比较方式的修改。

3.通过按照类图来设计体现了成绩和不同成绩考核方式之间是继承关系后期第三次系统给我们的思路带来的新拓展。

4.掌握了java中迭代器的基本使用,将容器类数据进行迭代处理分析统计。

5.使用迭代器时应该注意得到的方法,当使用hashmap使用迭代器时可以使用“keyset”进行迭代,而迭代器的泛型应该具体化为相关的key值类型,例如题目中则应变为string类型。

6.使用正则表达式中应该注意分组,常常是一个括号的差别,但是正则表达式就会导致错误。

7.通过SourceMoniter工具可以清晰的看出ParseInput类中的parseinput方法圈复杂度过高导致代码可复用性大大降低,进过自查发现自己在该方法里面使用了大量正则表达式和if-else语句的判断,今后应该注意将这些语句分散成不同的方法从而达到降低圈复杂度的目的。

7-3 课程成绩统计程序-2

分数 60
作者 蔡轲
单位 南昌航空大学

课程成绩统计程序-2在第一次的基础上增加了实验课,以下加粗字体显示为本次新增的内容。

某高校课程从性质上分为:必修课、选修课、实验课,从考核方式上分为:考试、考察、实验。

考试的总成绩由平时成绩、期末成绩分别乘以权重值得出,比如平时成绩权重0.3,期末成绩权重0.7,总成绩=平时成绩*0.3+期末成绩*0.7。

考察的总成绩直接等于期末成绩

实验的总成绩等于课程每次实验成绩的平均分

必修课的考核方式必须为考试,选修课可以选择考试、考察任一考核方式。实验课的成绩必须为实验。

1、输入:

包括课程、课程成绩两类信息。

课程信息包括:课程名称、课程性质、考核方式(可选,如果性质是必修课,考核方式可以没有)三个数据项。

课程信息格式:课程名称+英文空格+课程性质+英文空格+考核方式

课程性质输入项:必修、选修、实验

考核方式输入选项:考试、考察、实验

考试/考查课程成绩信息包括:学号、姓名、课程名称、平时成绩(可选)、期末成绩

考试/考查课程信息格式:学号+英文空格+姓名+英文空格+课程名称+英文空格+平时成绩+英文空格+期末成绩

实验课程成绩信息包括:学号、姓名、课程名称、实验次数、每次成绩

实验次数至少4次,不超过9次

实验课程信息格式:学号+英文空格+姓名+英文空格+课程名称+英文空格+实验次数+英文空格+第一次实验成绩+...+英文空格+最后一次实验成绩

2、输出:

实验课成绩格式:课程名称+英文空格+总成绩平均分

输入样例1:

在这里给出一组输入。例如:

java 实验 实验
20201103 张三 java 4 70 80 90
end

输出样例1:

在这里给出相应的输出。例如:

20201103 张三 : access mode mismatch
20201103 张三 did not take any exams
java has no grades yet
202011 has no grades yet

输入样例2:

在这里给出一组输入。例如:

java 实验 实验
20201103 张三 java 3 70 80 90
end

输出样例2:

在这里给出相应的输出。例如:

wrong format
java has no grades yet

输入样例3:

在这里给出一组输入。例如:

java 必修 实验
20201103 张三 java 3 70 80 90 100
end

输出样例3:

在这里给出相应的输出。例如:

java : course type & access mode mismatch
wrong format

输入样例4:

在这里给出一组输入。例如:

java 必修 实验
20201103 张三 java 4 70 80 90 105
end

输出样例4:

在这里给出相应的输出。例如:

java : course type & access mode mismatch
wrong format

输入样例5:

在这里给出一组输入。例如:

java 选修 考察
C语言 选修 考察
java实验 实验 实验
编译原理 必修 考试
20201101 王五 C语言 76
20201216 李四 C语言 78
20201307 张少军 编译原理 82 84
20201103 张三 java实验 4 70 80 90 100
20201118 郑觉先 java 80
20201328 刘和宇 java 77
20201220 朱重九 java实验 4 60 60 80 80
20201132 王萍 C语言 40
20201302 李梦涵 C语言 68
20201325 崔瑾 编译原理 80 84
20201213 黄红 java 82
20201209 赵仙芝 java 76
end

输出样例5:

在这里给出相应的输出。例如:

20201101 王五 76
20201103 张三 85
20201118 郑觉先 80
20201132 王萍 40
20201209 赵仙芝 76
20201213 黄红 82
20201216 李四 78
20201220 朱重九 70
20201302 李梦涵 68
20201307 张少军 83
20201325 崔瑾 82
20201328 刘和宇 77
C语言 65 65
java 78 78
java实验 77
编译原理 81 84 82
202011 70
202012 76
202013 77

注:非增加题目内容不再进行展示

圈复杂度:

注:未修改的类不再展示圈复杂度

类图:

 

分析:

1.本题相对课程成绩统计系统增加了实验课类,实验课只能对应实验的考察方法。

2.相对于考试和考察成绩信息的解析实验课限制了成绩的个数需要和解析课程信息时输入的成绩数目保持一致,不一致则会输出“wrong format”。

3.正则表达式中实验成绩的解析需要进行修改并且限制为【4-9】次。

4.其余内容和成绩统计系统-1基本保持一致。

总结:

1.当正则表达式使用不限个数的某一分组时需要使用“*”,而题面要求不超过9次大于4次则需要在正则表达式类再进行判断。

2.需要将成绩类进行修改,将单次实验成绩进行累加后当做总成绩进入实验成绩a中的totalScore变量中,再进行相关的平均分计算。

3.输出时实验成绩只需要输出一样数据即可。

4.可以看到本题圈复杂度相对于课程统计程序-1复杂度进一步增加,写了第一题之后没有考虑圈复杂度相关内容导致一错再错,今后书写代码时一定要注意相关的内容!!!

 

7-2 课程成绩统计程序-3

分数 64
作者 蔡轲
单位 南昌航空大学

课程成绩统计程序-3在第二次的基础上修改了计算总成绩的方式,

要求:修改类结构,将成绩类的继承关系改为组合关系,成绩信息由课程成绩类和分项成绩类组成,课程成绩类组合分项成绩类,分项成绩类由成绩分值和权重两个属性构成。

完成课程成绩统计程序-2、3两次程序后,比较继承和组合关系的区别。思考一下哪一种关系运用上更灵活,更能够适应变更。

题目最后的参考类图未做修改,大家根据要求自行调整,以下内容加粗字体显示的内容为本次新增的内容。

某高校课程从性质上分为:必修课、选修课、实验课,从考核方式上分为:考试、考察、实验。

考试的总成绩由平时成绩、期末成绩分别乘以权重值得出,比如平时成绩权重0.3,期末成绩权重0.7,总成绩=平时成绩*0.3+期末成绩*0.7。

考察的总成绩直接等于期末成绩

实验的总成绩等于课程每次实验成绩乘以权重后累加而得。

课程权重值在录入课程信息时输入。(注意:所有分项成绩的权重之和应当等于1)

必修课的考核方式必须为考试,选修课可以选择考试、考察任一考核方式。实验课的成绩必须为实验。

1、输入:

包括课程、课程成绩两类信息。

课程信息包括:课程名称、课程性质、考核方式、分项成绩数量、每个分项成绩的权重。

考试课信息格式:课程名称+英文空格+课程性质+英文空格+考核方式+英文空格+平时成绩的权重+英文空格+期末成绩的权重

考察课信息格式:课程名称+英文空格+课程性质+英文空格+考核方式

实验课程信息格式:课程名称+英文空格+课程性质+英文空格+考核方式+英文空格+分项成绩数量n+英文空格+分项成绩1的权重+英文空格+。。。+英文空格+分项成绩n的权重

实验次数至少4次,不超过9次

课程性质输入项:必修、选修、实验

考核方式输入选项:考试、考察、实验

考试/考查课程成绩信息包括:学号、姓名、课程名称、平时成绩(可选)、期末成绩

考试/考查课程成绩信息格式:学号+英文空格+姓名+英文空格+课程名称+英文空格+平时成绩+英文空格+期末成绩

实验课程成绩信息包括:学号、姓名、课程名称、每次成绩{在系列-2的基础上去掉了(实验次数),实验次数要和实验课程信息中输入的分项成绩数量保持一致}

实验课程信息格式:学号+英文空格+姓名+英文空格+课程名称+英文空格+第一次实验成绩+...+英文空格+最后一次实验成绩

2、输出:

为避免四舍五入误差,

计算单个成绩时,分项成绩乘以权重后要保留小数位,计算总成绩时,累加所有分项成绩的权重分以后,再去掉小数位。

学生总成绩/整个班/课程平均分的计算方法为累加所有符合条件的单个成绩,最后除以总数。

2)单门课程成绩按课程名称的字符顺序输出

课程成绩输出格式:课程名称+英文空格+总成绩平均分

6)如果解析实验课程信息时,输入的分项成绩数量值和分项成绩权重的个数不匹配,输出:课程名称+" : number of scores does not match"

7)如果解析考试课、实验课时,分项成绩权重值的总和不等于1,输出:课程名称+" : weight value error"

输入样例1:

在这里给出一组输入。例如:

java 实验 实验 4 0.2 0.3 0.2 0.3
end

输出样例1:

在这里给出相应的输出。例如:

java has no grades yet

输入样例2:

在这里给出一组输入。例如:

java 实验 实验 4 0.2 0.3 0.2
end

输出样例2:

在这里给出相应的输出。例如:

java : number of scores does not match

输入样例3:

在这里给出一组输入。例如:

java 实验 实验 4 0.2 0.3 0.2 0.1
end

输出样例3:

在这里给出相应的输出。例如:

java : weight value error

输入样例4:

在这里给出一组输入。例如:

java 实验 实验 4 0.2 0.3 0.2 0.3
20201116 张三 java 70 80 90 100
end

输出样例4:

在这里给出相应的输出。例如:

20201116 张三 86
java 86
202011 86

输入样例5:

在这里给出一组输入。例如:

java 实验 实验 4 0.2 0.3 0.2 0.3
20201116 张三 java 70 80 90 100 80
end

输出样例5:

在这里给出相应的输出。例如:

20201116 张三 : access mode mismatch
20201116 张三 did not take any exams
java has no grades yet
202011 has no grades yet

注:本次和上一道题重复内容题目不再进行展示

圈复杂度:

注:未修改的类不再展示圈复杂度

类图:

分析:

1.成绩类的结构进行了修改,由原来的继承结构变成了组合结构,将grade里的成绩变成ArrayList容器,可复用程度较高,相对于继承关系来说组合关系的关联程度也较低。

2.修改parseinput类的内容将权重进行可赋初值式的输入。

3.在parseinput类里进行权重总值的判断需要将权重总值为1.

4.double数据类和int数据类的下的比较,有相关的精度损失所以不能进行直接的判断。

5.课程信息输入下的实验成绩数量需和解析成绩下的单次实验成绩数量保持一致。

6.使用Iterator迭代器进行成绩迭代汇总再进行平均分的计算。

总结:

1.本次大作业将相关成绩类的方式进行了修改由原来的继承关系变为了组合关系,可以看出组合关系相对于继承关系来说关联程度较低,可复用性也更高。

2.本次程序将权重由原来的初始默认变为了可自定义的输入式处理,更加符合软件实际下的处理方式,更加贴合实际软件开发中的处理结构。

3.不同的基本数据类型不能直接进行比较,会有精度损失,可以直接使用强制类型转换进行解决或使用相减小于一个特定的值进行处理。

4.在parseinput类中解析单条数据时解析的先后也可能会造成相关的错误,例如在判断课程数据是否正确时应该先判断课程类型和考核方式而不是根据考核方式再来判断课程类型。

5.在单个程序中float类型和double类型应该保持一致,不然精度损失的相关类型错误会非常都难以判断。

6.当进行软件设计时应该保持尽量减低关联程度的思维,使代码的可复用性更高。

7.应该注意圈复杂度,圈复杂度过高!!!

踩坑心得:

课程成绩统计程序-1:

1.判断相同的成绩信息时有误

 解决方法:

使用hashset容器类该容器不允许相同的数据存在从而保证了唯一性,并且choiceCourse应该先寻找是否有相同的student类和course类然后作为数据传入即可。

2.重复的课程信息判断有误

 解决方法:

理论上使用hashmap容器类进行处理即可,因为hashmap不允许相同的key值数据存在,但实际上此测试点未通过是因为迭代器的泛型类型考虑有误,迭代器采用的是keyset迭代器而泛型却选择的是“course”类型,导致算课程数据时有误,这让我意识到迭代器实际上是一个较为容易出错的点,类型的想配对十分重要,而且此类错误不易发现容易给人带来误导性错误。

3.多个班级,多门课程,多个学生计算错误

解决方法:

此类综合性测试点的错误不易查找,经过大量的数据测试以及debug发现在计算课程成绩时没有进行累加导致成绩计算出错,书写代码时头脑一定要清晰不然就会导致这种错误,尽管非常的基础但是查找起来却较为困难,难以发现!!!

课程成绩统计程序-2:

 1.实验课成绩有误

 解决方法:

经过大量数据的测试发现是正则表达式的内容有误导致数据处理有误,实际上是正则表达式的分组有误,少加了括号导致,此类错误是书写正则表达式时理解不到位导致了相关概念的混淆。正则表达式分组相关内容还需要学习和掌握。

课程成绩统计程序-3:

1.多种类型复合错误

解决方法:

判断是否有相同的课程时应该在最先进行判断换言之优先级应该是最高的,若课程名字相同直接该条语句结束即可,不用再进行后面部分的处理和判断!!!!

2.多种类型复合错误

解决方法:

实际是double类型和int数据类型直接进行比较时会有精度损失,这在第一次pta大作业时有过相关的考察,切记切记!!!可以使用强制类型转化转化为int进行比较或作将二者相减小于一特定精度值!!!!

3.单门实验课,一个班级,多个学生无法通过

 解决方法:

大部分情况下该测试点不通过并非题面所描述的一样,而是由于精度不同造成的精度误差,将程序中所有的double类型数据改为float类型数据即可!!!!此点非常的坑!!!没有提示很难能够想到。

4.多种错误混合测试点无法通过

 解决方法:

大部分同学最后都会卡着这个点,但是每位同学卡这个测试点的原因不一样,该测试点要求成绩信息的解析方式应该是先解析是否有不符规的类型错误输出“wrong format”然后再判断课程类型和考核方式是否一致,若不一致输出相关的类型不匹配。但是我在本次作业将判断的先后顺序进行了修改导致是根据最后的考核方式来判断相符合的课程类型导致部分情况下不再输出类型不匹配而输出“wrong format”!!!! 哎,希望蔡轲能把数据处理的先后顺序讲清楚!!!!

主要困难及建议:

课程成绩统计程序-1:

1.java迭代器属于新概念第一次使用时较难掌握,特别是使用hashmap时可以选择的迭代器种类特别多而这其中迭代器则有相关泛型的选择,特别应该注意一一对应,线管错误的查找较难,例如使用“keyset”迭代器时需要和hashmap的key类型保持一致。

2.hashmap以及hashset等相关容器类的使用不熟练还需要多加练习,以及相关容器类的方法使用不熟悉。

课程成绩统计程序-2:

1.正则表达式中常常应为一个括号的原因导致正则表达式出错,希望能够系统性的讲解相关的分组概念,不然由于自己的头脑不清晰常常会导致类似的错误。

2.在实际处理实验课时可以将相关的实验课直接利用“grade A”类进行处理也可以单独重新再创一个成绩类进行处理,不清楚哪种方式更优,还是说现阶段的要求下二者都可以。

课程成绩统计程序-3:

1.成绩解析的先后顺序不清晰,导致相关的测试点无法通过,其次本题对于相关的限制性不够,同一个测试点交给通过本题的人测试结果有很大的区别,对于找出测试点来说非常的困难!!!!(花费了大量时间,试了很多种方式才找出来!!!)

2.测试样例希望能给多一些,由于本题的考核方式权重输入的判断有所不同,应该有相管道测试样例有所表现,但是题面上给出的测试样例并未包含仅仅有实验考核方式的样例。

3.本题题面上抛出疑问成绩类处理的组合关系和继承关系哪个更好,希望老师最后能给出自己的理解。

总结:

(通过world一共有4618字,没有包含题目哈!!!再说字数不够就不礼貌了哦,谢谢!!!)(已经将三道题目中相同的部分删除了哦!!!不要有歧义哈,没有必要用题目凑字数哈!!!!)

  本次课程成绩统计程序依然采用了迭代方式,这在现代软件的设计中是较为普遍的,使用敏捷开发占领市场再逐步的完善,通过本类型的大作业深化了容器类的使用,以及正则表达式的使用,在完成问题中类设计的相关的概念逐渐完善,类之间的关系逐渐清晰,意识到本课程中软件设计的重要性,一个好的设计可以给后期带来巨大的方便。但是在处理相关成绩数据时在通过正则表达式后,相关内容判断的先后顺序常常会给程序的编写带来困难,例如第三次大作业由于修改了正则表达式的判断顺序导致case 14始终无法通过,因而画了大量时间在找测试点上,而由于最后一次作业的规范化不够导致无法找出准确的错误,通过本题的人测试相同的一个测试点测试出的数据不同,最后是自己反应过来可能是相关的判断顺序导致错误才修改正确。通过本次大作业发现自己在使用正则表达式分组的时候存在问题,有时候仅仅是一个括号就会对结果产生改变。书写代码时应该注意圈复杂度,特别是在ParseInput(输入处理类)中大量有if-else语句和正则表达式的判断,尽量单独变成方法,将圈复杂度降低可以使代码的可复用性变高在软件工程中是一个至关重要的部分。通过这么多练习后发现自己在和老师的设计类的思维还是存在着较大的差距,我最先想要通过一些接口来实现相关的概念但是老师选择了组合等,还是需要将相关的题进行复盘理解老师的思维。其次发现自己对于一些容器类的使用不是很熟练,这些类的特点以及相关的方法还不熟悉,今后在这方面还得多多了解。在对容器类进行遍历的时候使用到了遍历器这是一个全新的概念我对此的使用不是很熟练其底层的一些逻辑还是需要弄明白,例如可以产生keyset的迭代器也可直接产生相关类的迭代器其使用方法还需要进一步掌握。java语言的学习暂时告一段落但是java还有很多东西课上还是没有讲。还需要自己收集相关的资料进行学习。