题目集第三阶段作业总结

一、前言

    这一阶段的题目集对于之前的两个阶段的题目集来说,题目量并没有之前那么多,但是难度较之前来说更大了,经过本阶段的题目集训练,我学会了使用ArrayList容器进行正向、逆向、和汉字排序,还学会了使用HashMap去检索和排序,在一段代码中使用HashMap以及Set去统计代码中出现的关键字出现的字数,其中还涉及到了正则表达式中的一些知识,难度大一点的是菜单计价程序以及课程成绩统计程序的迭代,总的来说,通过这阶段题目集的训练,我学到了很多有用的知识,提高了我的编程水平。

二、题目集7-11的分析

1、第七次题目集的分析

    1.第七次题目集只有一个题,它和之前的题目集六是一个类似的题,都是菜单计价程序

 

分析:这个题目相比较于题目集六的那一个题目,新增加了一些特色菜的内容,可以将之前题目集六的编好的一些代码搬过来修改一下就可以用上去了。

 

这是我根据之前设计的类,我在第一个菜品类中加入了flavor这个属性,它是用来辨别这个菜品是什么菜,第二个纪录类中我在里面加了一个degree属性,这是用来记录菜品的辣度或者酸度或者咸度。第三个方法是用来检验输入的点菜记录中的degree属性放入的值是否是符合所给的要求的。

 

这个方法是用来计算各个菜的口味度的平均值以及输出各个菜的口味。然后将这些所改的代码加入到之前题目集六所写的代码当中,一些基本类就构成了。

 踩坑心得:得先把基本的框架给构造出来,而不是直接开始上手去写,因为没有把基本的框架想出来的话,写到一半的时候可能就不知道怎么写了,基本框架写好了之后,按照题目所给的要求,一步一步的去实现,而不是一口气吃成一个胖子,就比如说我之前,把那些菜品、订单、记录、桌子、时间这些类的题目中各种要求的方法都给写了出来,耗费了我大量的时间,以至于我后面没有时间去写主类,到最后一分都没有得到,所以这次我学聪明了,我先将最基本的输入输出给实现了,然后再按照要求去增加代码实现,以至于我这次终于算是拿到分了。

2、第八次题目集的分析

由于第八次题目集只有课程成绩统计一个题,并且该题与后面几次题目集有相类似的题,所以打算将该题放到最后一次题目集的来讲。

3、第九次题目集的分析

题目集九只有一个小题

1.题目集九的题目是统计Java程序中关键词的出现次数

 

 分析:这个题目需要使用HashMap以及Set来进行统计,首先我们得先去网上去搜索Java源码中一共有的53个关键字,将53个关键字放进HashMap中,每个关键字对应初始为0,然后再利用正则表达式来匹配字符串以及将字符串中的符号以及多个空格转换成一个空格,然后将该字符串用空格分割成小字符串放进字符数组中,然后再根据字符数组中能不能找到关键字,如果能就让HashMap相应关键字所映射的次数加一,最后再放进Set中,然后再提出去排序,最后再输出。

 

 

 最后一张图片是将注释给替换成空格。

  踩坑心得:一开始不清楚怎么写,后来学会了字符串中将一些符号什么的替换成空格以及学会了正则表达式中元字符的使用才知道要这样写。

4、第十次题目集的分析

1.题目集十的第一小题是容器HashMap的检索

 分析:由于学号是唯一识别学生的,所以我打算用两个HashMap,其中key是学号,所映射的分别是姓名和成绩,最后再根据所输入的学号在HashMap中检索,然后输出。

 心得体会:对于HashMap的使用更加得心应手了。

 2.题目集十的第二小题是容器HashMap的排序

 分析:由于学号是唯一识别学生的,所以我打算用两个HashMap,其中key是学号,所映射的分别是姓名和成绩,然后我将HashMap中的关键字放进Set集合之中,然后再从Set中提取出来,再根据学号排序,最后输出。

 

 心得体会:学到了如何将HashMap的key放进Set集合中,然后将Set集合中的数据提取出来进行排序。

 3.题目集十第三小题是课程成绩统计程序

这题和题目集十一有相类似的题,所以我打算放到下一题目集分析的时候讲

4.题目集十的第四小题是动物发声模拟器(多态)

 分析:我们只需要根据题目要求实现题目要求的方法就行了。

 这是主类要求的静态speak方法,输出动物的名字以及该动物是怎么叫的。

 

 

 这是根据要求完善各种动物类,其中包括各个类的属性、以及重写Animal类的getAnimalClass以及shout的方法。

 

 5、第十一次题目集的分析

1.题目集十一的第一小题是ArrayList容器排序

 分析:首先将学生类给构造出来

 然后再在主函数中加一个排序方法

 通过这个方法之后就可以将学生按照总成绩由高到底进行排序。

 心得体会:通过学会这个排序方法之后,不需要再用那些很麻烦的排序方法,简化了许多冗长的代码。

 2.题目集十一的第二小题是课程成绩的统计成绩

前几次题目集中有几个和这一题差不多的题,所以我就打算放到这一题里面一起讲。

由于题目集十的题是题目集八的进阶版本,即题目集十的题的要求比题目集八的要求多了一个实验,所以就讲题目集十的题和题目集十一的题

(1)题目集十的课程成绩统计

 

 

 

 分析:首先我们得先想出最基本的框架结构,题目中给出了参考类图,我看了很久有一个地方没有理解明白,最后我在这个类图的基础上修改了一下类图之间的结构。

 

 

这是我设计的类图结构。

其中设计这个类图结构的灵感我是来自之前写菜单计价程序设计的类图结构得到的灵感,其中有CourseMenu类即课程表类、All类想当于菜单计价程序中的订单类,放输入的记录、CourseSelection类即选课类、还有两个成绩类以及实验成绩类等等。

 这是抽象成绩类 ,其中有三个属性,平时成绩、考试成绩、以及最终成绩。抽象方法是计算最终成绩。

 

 

 

 这是考察成绩类、考试成绩类以及实验成绩类,它们都继承抽象成绩类,都重写了计算总成绩的方法。

 这是我存放输入记录的类,它有三个ArrayList,第一个存放的是选课类,第二个是存放课程名字类,方便后面计算课程成绩的计算以及输出,第三个是班级类,方便后面计算班级的成绩以及输出。

 这是三个增加记录、课程名、以及班级的方法。

 第一个是将重复的课程名给删除的方法,第二个是将选课记录根据学生的学号进行排序。

 第一个是将课程名称进行汉字升序排序,第二个是班级排序,第三个是删除重复的输入记录。

 

 

 

 

第一个是计算课程成绩的,第二个是计算班级成绩的,第三个是计算记录成绩的,最后一个是一个判断条件,如果输入的记录符合这些要求的话,那么在计算班级、课程、记录成绩的时候就会把那些符合的给加上去,不符合的就给删除掉。计算成绩是靠双for循环,把相同的学生名字或者课程名字或者班级加上去。

 

 这是课程表类的两个方法,第一个是增加课程的方法,第二个是根据课程名在课程表内查找。

 

 

 

 

 这是我写的主函数,我是根据输入一行一行的长度来进行判断的,如果长度是三的话,那么它就是课程表里的内容,如果长度是四或者是五的话,那就是记录,如果array[3]是4-9的话,说明输入的是试验记录。

 (2)题目集十一的课程成绩统计

 

 

 

 分析:这一题较之前的一题有所改动,就是如下图的输入样例所示,在输入课表信息的时候就将实验的各个成绩的权重给定好了,而之前的一题就是实验的各个成绩的平均数,所以只需要将之前那一题的代码给拿过来改一改。

 将之前录入实验成绩的信息记录的判断条件从左边改成了右边。

 在计算课程、班级、学生的成绩时,相较于之前的方法,我在方法中多加了一个实验的判断条件。

 这是计算学生成绩时,我的方法是将后面相同名字相同学号的记录的成绩加到第一个出现这个学号这个名字的最终成绩上,最后再求平均数。因此我设置了那个最终成绩的属性,并让他的初始化为-1;

如果这个学生只有一个成绩的话,把我就将他的成绩加到最终成绩上去。

 三、总结

对于这次阶段的题目集来说,计价程序和课程成绩的难度相对来说是比较难一点,耗费的时间难一点,发现了自己的不足,熟练了如何去使用正则表达式去判断,还学会了使用HashMap去检索代码中的出现的关键字,还学会了容器ArrayList排序,学会了这个排序了之后大大缩短了代码以及使代码看起来更加简便,不需要用使用冗长的双for循环的冒泡排序方法,使逻辑更加的清晰可见,对于这次的菜单计价以及课程成绩统计程序,我吸取上次的经验,先构思好框架,然后再一步一步的实现代码,遇到困难也会去寻找解决的方法,比如说这里面用到的汉字排序的方法,一开始我并不知道汉字排序,在我查资料之后才学会了还有这种排序的方法,所以说,学无止境,我还有很长的一段路要走,还有很多东西还没有学会,我会一步一步地学,提高自己的知识储备量,提高自己的能力才会更进一步。

 四、建议

对于教学方法的话,我觉得可以多讲几个例子,这样可以使我们学的更加透彻,教学过程的PTA题目集驱动我觉得所开放的时间可以延长一点,让我们能有一点时间可以完成其他的作业。

 

posted @ 2023-06-27 21:49  21161115王志  阅读(40)  评论(0)    收藏  举报