第三次大作业
前言
第三次java大作业,这是下学期最后一阶段的pta总结及所有java课程学习的总结,对第十到第十六周的综合性总结。主要包括对代码源码的分析、做题过程中的思考思路、提交时出现问题的改正方法、怎么找到问题并改成,从中学到了什么、做题得到的心得等,以及课程上所学的知识总结、这一阶段整体的学习过程等等...并在今后的学习中以此为借鉴。
pta作业分析
第一次作业(训练集8)
知识点
主要涉及类之间的各种关系,继承类抽象类等等,对类中的方法进行实现,还涉及到了正则表达式,对字符串内容进行匹配,ArrayList类的方法的使用等等。
题量
一道题,题目要求很多,实现一个课程成绩统计程序。
难度
难度比较大,需要花费较多时间去整理实现功能。
设计与分析:
op训练集08:
课程成绩统计程序
先从所给的这个类图出发来完善每个类之间的关系,比如考试成绩考察成绩继承抽象类成绩等。再所有类之间关系确定后再去根据题目要求去补充各个类所包含的方法并完善实现,属性的继承,方法的重写等都要完善,先附上源码。
这是题目的输入要求,将约束条见中的部分判断字符情况和数字限制情况以及必修选修的选取情况等创建一个单独的类来方便实现匹配。
对于主函数,拿其中的一部分来做解释
在循环体中,程序根据输入内容调用matching对象的matchingInput方法判断输入内容的合法性。如果matchingInput方法返回1,则说明输入内容为课程信息,程序将输入字符串解析为课程名字、必修/选修和考察方式,并创建一个Course对象,将其添加到courselist(课程列表)中。如果输入内容不是课程信息,则程序进入条件分支判断学生信息是否合法。如果输入字符串的长度为4,说明其包含学生信息,程序通过解析输入字符串获取学生姓名、学号、课程名、平时成绩、考试成绩等信息,并创建一个Student对象。
如果课程列表中不存在输入的课程名,则程序输出错误信息且返回。否则,程序判断该课程的考察方式是否与输入的学生成绩匹配。如果不匹配,则输出错误信息。最后,程序创建一个班级对象并将其添加到classlist(班级列表)中,计算学生的总成绩,并将学生对象添加到stulist(学生列表)中。
主类中还有两个静态方法t和j,它们的主要作用是在给定的ArrayList中查找一个具有特定属性的对象。具体来说,t方法接受一个班级列表cla和一个班级号码num作为参数,它遍历列表cla并检查其中每个班级的num属性是否等于num,如果有则返回该班级对象,否则返回null。j方法接受一个课程列表course和一个课程名字name作为参数,它遍历列表course并检查其中每个课程的classname属性是否等于name,如果有则返回该课程对象,否则返回null。
这题大概方法思路就是这样;
第二次作业(训练集9)
知识点
主要涉及到了set和map这两类的用法,用来存储统计关键字出现次数,因为有部分的关键字不用统计,所以要用到正则去排除隔开某些字符和符号。
题量
一道题,题目要求不多且难度不大,掌握set和map用法就差不多。
难度
难度不大。
设计与分析:
op训练集09:
统计Java程序中关键词的出现次数
这是题目要求,先附上原码。
再对代码进行分析,首先,程序通过一个HashSet将keywords数组转换为Set,去除了重复元素。然后,程序使用一个HashMap来记录每个关键字出现的次数。程序循环读取标准输入,并使用Scanner类的hasNextLine()方法判断输入是否结束。在每次循环开始时,程序将flag1和flag2标记设为false,若flag1为false,则说明输入的代码格式不正确。程序排除掉注释行(以“//”开头的行),如果发现一个“/”符号,程序在下次循环中开始处理多行注释,直到遇到闭合的“/”符号;如果正在处理多行注释,则跳过该行的处理。程序还使用正则表达式来去除代码中的字符串常量。
接下来,程序对每行代码进行拆分(split),将其拆分成多个单词,在单词中查找是否包含关键字。如果一个单词形如“xxx[y]”,其中[x]代表任意字符,[y]代表“[”和“]”之间的内容,程序截取其前面的部分并把它视为一个单词;如果一个单词包含多个逗号,将它拆分为多个子单词,并对每个子单词进行处理。
最后再排序输出就行了。
第三次作业(训练集10)
设计与分析:
op训练集10:
7-1 容器-HashMap-检索
源码
分析:
程序首先通过import语句引入了java.util包,这是Java中的一个自带包,用于提供大量的通用工具类和数据结构。接着,程序定义了一个名为Main的类,并实现了其中的main方法作为程序的入口。
在程序的核心部分,程序使用一个while循环来不断读取从标准输入流中读入的每一行数据,将其中的学号、姓名和年龄分别存储在名为studentMap的HashMap中。输入字符为“end”时,循环退出。
在循环结束后,程序再读取一行数据,该行数据为查询的学生学号。程序检查这个学号对应的学生是否存在于studentMap中,如果存在,则获取该学生的姓名和年龄信息,并将其输出;否则,输出错误信息。
7-2 容器-HashMap-排序
题目要求
源码
代码较少直接对整个代码进行分析;
首先,程序定义了两个HashMap,一个用于存储学生姓名,另一个用于存储学生成绩。随后,程序使用一个while循环来不断读取从标准输入流中读入的每一行数据,将其中的学号、姓名和成绩分别存储在对应的HashMap中。输入字符为“end”时,循环退出。
接着,程序将HashMap中的每个key(即学生的学号)放入一个List中,并使用Collections.reverseOrder()方法将List按照学号从大到小的顺序进行排序。
最后,程序遍历排好序的List,将每个学生的学号、姓名和成绩输出到标准输出流。具体来说,程序在每一次遍历时,通过HashMap从学号获取到对应的姓名和成绩,并将其格式化成字符输出。
总之,该程序实现了基本的输入输出和数据存储功能,虽然较为简单,但仍然涵盖了一些基本的Java编程知识点,例如Java中的基本数据类型、控制语句等。
第四次作业(训练集11)
设计与分析:
op训练集11:
7-1 容器-ArrayList-排序
题目要求
源码
本题主要通过按数学/物理成绩之和从高到低的顺序输出所有学生信息。
将学生的所有属性信息等储存在学生类之后再写主方法来调用输入学生信息。对主方法进行分析。
程序创建了一个空的 ArrayList<Student> 对象 students,并使用一个 while 循环来不断读取用户输入的学生信息。循环内首先使用 input.nextLine() 方法读取用户输入,并使用 trim() 方法去掉字符串两端的空格。
其中 std[0]~std[3] 依次存储了学生的学号、姓名、数学成绩、物理成绩四个字段。
程序接着将 std[0]~std[3] 转换为对应的类型,并使用这些信息创建了一个 Student 类型的对象 student。最后,程序将 student 对象添加到 ArrayList<Student> 中。
这里在对学生的成绩进行冒泡排序最后在输出就行了。
7-3 jmu-Java-02基本语法-03-身份证排序
题目要求
源码
本题主要通过list列表来存储身份证数据
对这串代码进行个简单分析,
具体来说,程序首先使用 scanner.hasNextLine() 方法来判断是否还有需要读取的行。如果有,则读取下一行并使用 trim() 方法将其前后的空格去掉,并将结果存入 sort 变量中。
如果 sort 的值等于 “sort1”,程序对身份证号列表 ids 进行排序,采用的排序方式是首先将每个身份证中的年月日提取并转换为 int 类型,然后使用自定义的 getDate() 函数作为比较器进行排序。排序后,程序遍历身份证列表 ids,并使用输出函数 getDate() 来打印每个身份证的年月日排序结果。
如果 sort 的值等于 “sort2”,程序直接调用 getDateRaw() 函数来从身份证中提取年月日并排序。排序后,程序遍历身份证列表 ids 并直接输出每个身份证的内容。
最后,如果 sort 的值不是 “sort1” 或 “sort2”,程序输出 “exit” 并退出循环。
最后单独从身份证中抽出年月日的数据以题目要求格式输出就行了。
阶段总结
1.pta总结
(1)通过本段时间的做pta的题,对某些代码较多的菜单等程序有了初步的掌握,不像之前的放弃停止,有了比较清晰的思路。
(2)通过pta来发现哪里不足和欠缺,比如这题所用的正则表达式的这一个知识点语法之前没学会,在做这题时不会就可以去学。做的越多肯定会的就越多,同样做题时不会的越多,在做题后去学会的也就越多了。
(3)同样印象比较深的还有set和map这两类,对这两类所学的做个简单总结:
- Set是一种集合,它存储唯一的元素,不允许重复。它继承自Collection接口,并提供了存储和操作一组元素的方法。
- Map是一种键值对的集合,它存储唯一的键和对应的值。每个键可以映射到一个值。它继承自Collection接口,并提供了存储和操作键值对的方法。
它们可以极大地简化数据操作,并提供高效的查找和存储性能。
(4)近期的pta难度较大,花的时间也很多,也同样在长期性的学习与敲代码中,有了许多与之前不一样的感觉,对于代码更加的贴近,也对面向对象更加进一步了解。
2.课程总结
课程优点
- 课程提供了清晰的课程结构:。老师能够提供一个明确的课程结构,包括主题和子主题,并在每一节课中有很好的组织和导航。
- 提供实例和案例学习:老师通过实例和案例的方式来讲解Java的概念,这样能够帮助学生更好地理解和应用所学知识。
- 强调实践:老师在课程中重视实践,让学生通过编写代码和解决问题来巩固和应用所学的知识。
- 多样化教学方法:老师采用了多种教学方法,如讲解、演示、实践、小组活动和项目等,以满足不同学习风格和需求的学生。尤其是小组讲课,让学生自己备课讲课,不但通过小组形式让学生之间更加了解,增加团队配合,也让学生学的更轻松易懂。
课程改进建议
-
激发学生的兴趣:除了提供实例和案例学习,可以尝试通过引入有趣的编程挑战、编程比赛或者实际项目,来激发学生对Java的兴趣和动力。
-
鼓励学生自主学习:给学生提供一些学习资源和推荐书籍,鼓励他们主动学习和探索,以提高他们的编程技能和自学能力。
-
实时反馈和指导:给予学生及时的反馈和指导,帮助他们解决在学习过程中遇到的问题。可以通过课堂上的问题解答环节、在线论坛或者办公时间来实现。
-
引入最新的技术和趋势:Java是一个持续发展的编程语言,建议老师在课程中介绍一些最新的技术和趋势,如Java框架、云计算和大数据等,以使学生对行业动态有所了解。
-
鼓励团队合作:鼓励学生进行团队合作项目,这将培养学生的协作和沟通能力,并使他们理解到在实际开发中如何与他人协作。
这大概就是这次大作业的全部了,之后有不足会进行改善。