pta三次题目集总结

发布时间 2023-10-07 23:30:43作者: IT精英888

一、前言

       第一次题目集,一共九道题目,题目量虽然有点大,但是都是一些基础题,涉及基础的输入和输出、浮点数的应用、日常加减乘除运算、字符串的应用、提取所需信息等。都是一些简单基础题。

       第二次题目集,一共八道题,题目量也是比较多的,这一次相对于第一次难度上升,是第一次题目的综合应用,涉及到的知识点有类和数组的基本应用、关联类、重复数据的判断和删除、类的封装、单位的换算,综合第一次题目集的知识并加入了类的应用。难度不是也不是很难。

       第三次题目集,一共四道题,题目量不大,难度逐渐加大,涉及到的知识点有类的基本使用、判断字符串输入格式、关联类、类中信息的匹配、封装类等。多个类相互联系起来形成一个程序。

二、设计与分析

第二次题目集7-1如图:

 

 

 

这是一个简单的学生成绩管理程序。先定义一个Student类来表示一个学生对象,包括学生的ID、姓名和语文、数学、物理成绩等属性。Student类还提供了计算总分和平均分的方法。在Main类中,首先定义了学生数量n和一个存储学生信息的数组students。然后通过Scanner类获取用户输入,依次输入每个学生的信息,并将输入的信息保存到Student对象中,并将该对象添加到students数组中。最后,使用循环遍历students数组,分别计算每个学生的总分和平均分,并输出到控制台。该程序的实现主要是通过类和对象的概念来实现学生成绩的管理。

 

第二次题目集7-2如图:

 

 

这题是一个学生成绩管理程序。首先定义了grade类,表示每门课程的成绩,包含两个属性:平时成绩和期末成绩。TotalScore方法计算总分,并返回整数类型的总分。然后定义了Student类,表示学生对象,包含学号、姓名以及语文、数学、物理三门课程的成绩属性。通过构造函数初始化学生对象,total方法计算总分,average方法计算平均分,output方法输出学生的学号和姓名。在Main类中,首先创建Scanner对象来读取用户输入。然后定义一个长度为3的Student数组,用于存储学生信息。同时创建一个长度为9的整型数组shu,用于存储每个学生的三门课程的总分。通过循环依次读取每个学生的学号、姓名和课程成绩,并将成绩信息存储到相应的grade对象中。根据输入的科目不同,将对应的总分存储到shu数组中。最后,再通过循环遍历stu数组,输出每个学生的学号和姓名,并计算和输出总分、平时成绩、期末成绩和平均分。

 

第二次题目集7-7如图:

 

 

 

 

这段代码是一个简单的点餐系统。主要分为菜品类(Dish)、菜谱类(Menu)、点菜记录类(Record)和订单类(Order)四个部分。其中,Dish类表示单个菜品,包含名称和单价等属性;Menu类表示菜单,存储各个菜品对象;Record类表示单个点菜记录,包含菜品对象和份额等属性;Order类表示整个订单,包含多个点菜记录。在Main类中,首先通过Scanner对象读取用户输入,并创建菜单和订单对象。通过循环依次读取每个菜品的名称和份额,然后调用Order对象的addARecord方法加入一道菜。该方法首先在菜单中查找指定菜品是否存在,如果存在则将该菜品和份额记录到订单对象中。最后,通过调用Order对象的getTotalPrice方法计算整个订单的总价格并输出。

 

第三次题目集7-2如图

 

 

 

 

这段代码是一个简单的课程成绩统计系统。主要分类为课程类(Course)、课程成绩类(Grade)、学生类(Student)、班级类(Class)、信息存储类(SelectCourse)五个部分,其中课程类包含课程名称、课程属性和考核方式属性,课程成绩类包含输入的学生成绩等一些信息,学生类是将课程类和课程成绩类按学生分类,一个学生为一个单位记录成绩,班级类是学生类按班级号分类,相同班级学生放一个班级中,信息存储类是将其他各类使用List来储存起来方便查找和输出。在Main类中,首先通过Scanner对象读取用户输入,并创建课程类和课程成绩类。通过循环依次读取每个课程和课程成绩,然后调用SelectCourse类中的方法将课程和课程成绩按学生和班级进行分类储存。最后通过异常判断并给出相应提示,左后正确输出成绩信息。

 

三、踩坑心得

第一次题目集

7-2:按照题目要求直接输出质量和长度,但是忽略了double和float的精度问题,导致输出和测试点基本上一样还有测试点不通过,最后使用强制类型转换把double类型改为float类型输出

7-4:以为房产收税和工资收入收税一样是超出部分额外收费,导致输出一直错误,将计算方式改为全部需要额外收费后问题解决

7-7:当判断直角三角形时使用勾股定理其中两边平方的和等于第三边的平方,结果导致对于直角判定的测试点一直过不去,查询资料发现判断直角是使用两边平方和减去第三边的平方小于0.000001.

第二次题目集

7-1:精确到小数点后两位,舍去部分按四舍五入规则计入最后一位时,先把数扩大一百倍然后保留整数,再缩小100倍。最后得到的数和结果有点偏差,不能四舍五入,改为使用%.2f的方法输出得到正确结果

7-6:在输出结果时用printf输出导致有部分测试点过不去,改为使用println输出问题解决

第三次题目集

7-1:在输出所在月份相差时使用Java自带的方法,导致计算出来相差总月份数,最后使用数字运算,先提取月份然后直接相减并输出。在判断输入格式时简单判断输入的是否为数字导致容易误判,使用正则判别式进行判断才通过。

7-2:多种错误同时出现时报错顺序不同,更改判定的先后顺序。

四、主要困难以及改进建议

主要困难

1、输入信息的解析和处理:需要正确解析输入的格式,并进行相应的判断和处理,例如学号、姓名、课程名称的长度、成绩的范围等。

2、课程性质和考核方式的匹配:需要判断输入的课程性质和考核方式是否匹配,对不匹配的情况进行处理。

3、成绩计算与平均分的累加:需要按照考核方式和权重计算每门课程的总成绩,并将成绩进行累加求平均。

4、结果的输出:需要按要求格式化输出结果,包括学生课程总成绩平均分、单门课程成绩平均分、班级所有课程总成绩平均分,并按一定规则进行排序。

5、异常情况的处理:在处理异常情况时,需要给出明确的错误提示信息,便于用户了解问题所在。同时还需注意边界情况和特殊情况的处理,确保程序的正确性和稳定性。

6、日期字符串的解析和验证:需要正确解析输入的日期字符串,并进行格式验证,确保日期的合法性,包括年份、月份、日期的范围等。

7、闰年的判断:需要判断给定的年份是否为闰年,根据闰年规则进行判断。

8、计算当年第几天、当月第几天、当周第几天:需要根据给定的日期,结合日期计算规则,计算出日期在当年、当月、当周中的位置。

9、日期差的计算:需要计算给定的起始日期和结束日期之间相差的天数、月数和年数,考虑闰年和月末日期的特殊情况。

 

改进意见

在第二次题目集7-7中FindDish方法的条件判断语句中应该使用逻辑与(&&)而不是按位与(&)。另外,在记录点菜时应该考虑同一菜品重复点了多份的情况,而不是简单地默认菜品名相同则直接覆盖记录。此外,为了更好的用户体验,可以在菜单类中添加一个显示所有菜品的方法,让用户更方便地查看可选菜品。

在第三次题目集7-1中将代码中使用Java8引入的日期时间API(LocalDate)替换老旧的Calendar类。在JudgeEffective方法中,可以使用更简洁的逻辑判断日期是否合法,如根据不同月份判断天数是否符合要求。将重复的代码逻辑封装成一个方法,减少代码冗余,如闰年判断。

 

五、总结

通过这三次题目集我学到了字符串的处理:输入的课程信息和成绩信息都需要进行字符串的解析和处理,包括按照空格分割、格式校验等。集合的使用:需要使用集合来存储和管理课程信息和成绩信息,方便后续的数据统计和计算。条件判断和异常处理:需要对输入的数据进行条件判断,比如成绩范围的检查、课程性质和考核方式的匹配等,以及异常情况的处理。数字计算:需要进行数值计算,包括加权求和、平均值的计算等。格式化输出:需要将处理后的结果按照指定的格式进行输出,包括排序输出、输出特定信息等。通过解决这个问题,我们能够加深对Java语言基础知识的理解,并且学会合理运用各种常用的Java技术和工具。类和关联类的应用:规范的进行类的封装,和关联类之间的关系以及调用类中的方法。

在多个类的建立和使用方面需要进一步学习和研究如何方便简单的建类,以及构建清晰的类与类之间的关系。