zx3374

PTA题目集阶段总结(3)

一、题目集总结

(1)概述

OOP训练集07

  本题目集共三道题,逐个递进,第一题考察了封装性,第二题考察了继承与多态,第三题考察了继承、多态、接口及集合框架,三道题都给出了相应类图,不需要自己设计,难度不大。

OOP训练集08

  本题目集有两道题,考察了继承与多态、ArrayList泛型、Comparable接口及泛型、单一职责原则及“开-闭”原则的应用。这两道题目都比较长,需求比较多,需要耐心分析,但总体难度不大,其中第一题还给出了类图和主方法源码,第二题没有给出类图,需要学生自己在第一题的基础上做出相应修改。

OOP训练集09

  本题目集只有一道题,考察了List、Set和Map的应用。题目比较简单,但需要考虑多种情况,比如单行注释、多行注释、双引号等等,需要反复测试、不断填补欠缺考虑的地方。还可以运用多种方法来作答。

OOP训练集10

  本题目集只有一道题,考察的内容比较综合,比如继承、ArrayList等,题目需求比较多,需要考虑多种情况,首当其冲即是匹配有关信息,其次便是通过循环匹配相关班级、课程、学生,计算相关的成绩,还要注意数据类型和精度。题目仅给出了部分类图框架,需要自己进一步补全并完善设计,这也是本次题目集的难点。

OOP训练集11

  本题目集有四道题,其中三道题分别考察了容器-HashMap-检索、排序以及多态,这三题都比较简单,甚至不需要过多设计,看完题目就知道该如何完成了。第三题是对训练集10的题目的迭代,添加了实验课程,顺着上一次的思路进行相应增改就行了,不需要另外设计,并不会很难。

OOP训练集12

  本次题目集考察了容器-ArrayList-排序、接口-自定义接口、覆盖,让我们进一步掌握ArrayList的排序功能、覆盖,同时理解栈的底层逻辑。进一步迭代题目集11的课程成绩统计程序-2,修改了计算总成绩的方式,并要求修改类结构,将成绩类的继承关系改为组合关系。本题的一些输出方式有所调整,需要注意,而且一些输入信息和类的结构有所改动,匹配方式也要相应改变,需要注意的地方挺多,比如数据精度,比第二次题目会更难。

(2)设计与分析

OOP训练集07 7-3 图形继承、多态、接口及集合框架

  本题的重点就在Comparable接口,应该按照题目要求覆写compareTo方法,对图形面积进行排序。

OOP训练集08 7-1 图形卡片游戏

  本题要注意Card对象的创建,由Card类中的有参构造方法 public Card(Shape shape),应该先创建一个Card类,然后将card添加到cardList中;还有对于sort方法的覆写,另外,需要注意,这题是降序排序。

OOP训练集10 7-1 统计Java程序中关键词的出现次数

 本题分为三步,第一步:将关键字存入ArrayList或者HashSet中,并进行排序;

第二步,筛选出源码中的关键字并存入TreeMap中,首先要将字符前后都加上空格,以便后续的分割和记录次数;

 

第三步,由于之前对关键字进行了如题目要求的排序,所以直接通过双循环找到相应的关键字,遍历输出即可。

OOP训练集10 7-1 课程成绩统计程序-1

本题类图如下:

 

首先要匹配输入的信息:

然后进行初步的输出和课程信息、课程成绩信息的方法的匹配:

OOP训练集11 7-3 课程成绩统计程序-2

本题类图如下:

新增对实验次数的匹配:

OOP训练集12 7-2 课程成绩统计程序-3

本题的类图如下:

增改了对课程和成绩信息的匹配:

(3)采坑心得

OOP训练集07 7-3 图形继承、多态、接口及集合框架

1.覆写toString

 

  如果没有这一步,就会输出:图形继承与多态_接口及集合框架.Rectangle@6615435c;因为在使用某个类的对象时,如果没有对该类进行toString()方法的重写,默认会调用Object类中的toString()方法输出该对象的类名和哈希码;所以,如果要输出具体的属性值,就要在类中重写toString()方法,返回想要输出的属性值。

2.善用size(),注意中间值的类型

  像这里,尝试着用选择排序对图形的面积进行排序,开始想着有四种图形,理所应当地写下了“i < 3"、"j < 4",导致了排序出错,因为ArrayList中不一定只有四个对象,所以一下很多方法不应该用3、4等数字表示,而应该用list.size()的相关表达式。

  另外,如图中“错误示范”——中间值temp的类型应该是四种不同的图形的父类“AbstractShape”,而且list中元素的赋值方法不是用简单的“=”,而要用到set()方法。

OOP训练集08 7-1 图形卡片游戏

  这题没什么大问题,就是有些单词能复制粘贴就复制粘贴,不然拼错字母了,却还是茫然地找程序的问题;比如我把“Trapezoid”拼成了“Traperoid”,导致有关梯形的测试点出错。

OOP训练集10 7-1 统计Java程序中关键词的出现次数

1.双引号

  只写双引号会报错,且在源码中不分左双引号和右双引号,像“" null "”这样写,如果只是单纯的startsWith("\"")和endsWith("\"");单个的双引号既是开始又是结束,就会立即检测立即退出,所以引入了“static flag”和“flag = !flag;”,只有凑到一对双引号,才会退出引号中的字符串,进而才开始算作源代码。

 2.多行注释

因为存在换行注释的情况,如果放在原来的位置,换下一行时又会被赋值为true,依然会输出中间行的关键字:

OOP训练集10 7-1 课程成绩统计程序-1

1.格式错误

除了“必修”、“选修”、“考试”、“考察”之外的错误,还需要注意题目中提到的1到10个非空格(TAB)字符,和考试成绩是整数之类的限制。

2.如果性质是必修课,考核方式可以没有

需要额外匹配这种情况,详见下图:

OOP训练集11 7-3 课程成绩统计程序-2

复制粘贴的时候注意要修改前面的内容,比如我忘记把第二个if的“必修”改成“选修”,造成了错误。

OOP训练集12 7-2 课程成绩统计程序-3

1.成绩计算

2.精度转换

  由String转double带来的误差,导致if判断语句出错,不能正确输出,所以要将权重之和转换为整型或者运用差的绝对值小于某一数值来判定,并且,本题最好使用float类型的数据计算,(反正作者用了就通过了更多的测试点),详见下图:

3.仔细审题,注意输出方式

  刚开始还是和前两个题目集一样,输出平时成绩平均分、期末成绩平均分、总成绩平均分,结果有两个测试点无论如何都过不去,总在计算上找问题,最后发现竟然是输出有问题。

(4)改进建议

OOP训练集07 7-3 图形继承、多态、接口及集合框架

1.覆写tostring方法可以统一写在父类AbstractShape中,而不用每个子类中都写,占用内存且容易遗漏;

2.不要再迷恋什么选择排序、冒泡排序了,“list.sort(Comparator.comparingDouble(AbstractShape::getArea));”多简洁有力啊。

OOP训练集10 7-1 统计Java程序中关键词的出现次数

虽然代码很短,才七十多行,但还是可以考虑一下单一职责,设计相应的方法。

(5)总结

  这几次的题目集严格来讲,总体难度并不大,很多题目是为了让我们能更熟练的运用封装性、多态、继承和接口等,不过有些题目比较长,这时候就需要我们仔细审题,耐心分析,精心设计,不要因为题目冗长复杂就失去耐心,草草了事。在这些题目中,课程成绩统计程序给我留下了很深的印象,而这道题本身也确实值得多琢磨,它考察了学生的需求分析和设计能力,涵盖了多种情况,测试点比较复杂,需要学生根据提示不断完善代码等等。但是也让我成长得更快,通过匹配输入的信息让我发现了matches的妙用;通过计算权重让我发现了String强转成double精度的差异……同时也更加揭开了程序的缺点,比如一旦题目变得复杂,其单一职责就乱套了,此时我的首要目的并不是写好一个程序,而是在规定时间内将代码提交上去,通过全部测试点就行了,所以会出现if语句乱飞的情况,或者为了省事,在一个类里面构造许多许多个方法;而这些方法杂糅在一起,会显得代码很没有逻辑,导致可读性降低。

  好在到了学期末,本学期的课程都结束了,可以将心思都放在专业上了,可以趁着这段时间继续学习、多加练习,趁热打铁,精进自己的技术。万万不可像C语言那样,因为特殊情况提前放假,整个人都松懈了,结构体草草学了一下,指针也没有多花时间去钻研,其中文件的内容更是到要用的时候才紧急上网找方法,到现在也没学会什么。再加上开学要考试,寒假就是左看看高数、右背背历史,这就算了,有点时间多还会看看数据结构,想着提前预习一下。但经过这个学期的学习,我突然想通了,学得再多但不精通是没什么用的,有些知识可以了解一下,点到为止;但专业上的一些技术,必须学得扎实、记得牢固、用得得心应手。

二、教学评价

 

(一)、教学理念(OBE)

  Java课程的教学主要关注学生在学习过程中所达到的具体目标和结果,而不仅仅关注知识掌握程度,但也不能忽视学生对知识的掌握程度。但是大部分学生都没有主动学习、超前学习的意识,且上个学期的涉及的专业课程不多也不是很难,很多学生还是抱着“上了大学就轻松了的心态”度过的,而且懒懒散散地过了寒假,又是以比较懒散的状态做完了C语言的课设,期间基本上不会想到自学的;所以课程开始就说不讲语法,学生的反应基本上都是抗拒的,一开始上课的状态也不会很好,就是处于一种“你啥都不教,等着我自学成才吗”的不满状态。所以可以在寒假先布置一些预习任务,或者将教学大纲告知学生,让他们有自主学习的方向和意识,在开学后进行一次小测验,检查他们的学习成果。效果不好的,还可以趁着刚开学,课程还比较简单的时候,在周末给他们加一轮学习,以确保赶上其他同学的进度。不过这样的话,可能也会有许多同学不满,诸如“过年都不让我轻松”、“上课已经很累了,还要压榨我的周末”。但没办法,意识毕竟是难以培养的,只能借助分数让他们有紧迫感,而无论如何,抱怨必然是难免的,很多学生永远会向往更轻松的生活;这就需要老师控制好压力了,压力不够就会无关痛痒,学生不会在意;施压太过也会适得其反。

 

(二)、教学方法(边讲边练)

  边讲边练无疑可以让学生及时巩固老师所讲的知识点,但有些理解能力较差的学生可能一时无法在课堂上完全理解并运用老师讲的知识点,所以老师可以先给出相关题型,安排学生预习并尝试解题,然后在课上讲解,课后收集作业检查并评分,让学生明白自己写的代码处于什么层次。

  另外,虽说写程序是没有统一答案的,但还是可以相应的给出一个比较标准的示范,因为很多学生对自己的程序是茫然的,他们不清楚自己写的怎么样,符不符合规范,也不了解标准的格式应该长怎么样;所以很多时候,他们会选择去网上找别人写的代码,但由于自己本身的局限,也并不很分辨地出人家写的怎么样、该不该学习,如果他们参考的代码并不标准,那就容易被带偏,也不利于后续的学习。

(三)、教学组织(线上线下混合式教学)

  线上课程可以让学生随时随地学习,但会存在很严重的刷课现象,我记得高中的时候上网课,会不定时冒出一个弹窗,要求学生在30s以内点击,否则会自动暂停视频。

(四)、教学过程(PTA题目集驱动)

  PTA题目集可以极大的锻炼的能力,但是和在“教学方法”中提到的一样,虽然题目集没有统一答案,但还是可以给出一个比较标准的示范供学生参考。因为会存在这样的情况:这个程序写的并不怎么样,但是测试点简单,很容易就通过了;或者没有通过测试点,但是在自己的研究和与同学的探讨中知道了这个测试点的内容,简单的话就给完善一下程序,如果比较复杂,直接加if语句混过去。而且,学生往往会因为时间和精力的原因,或者直接是得了分就懒得动了,就将题目抛诸脑后了,往往以后也不会再研究了。这样也不利于学生的进步和成长。

(五)、教学模式(BOPPPS)

  去网上了解了一下——BOPPPS(Bridge-In, Objective, Pre-Assessment, Participatory Learning, Post-Assessment, Summary)是一种教学模式,它提供了一个系统化和结构化的教学框架,强调学生的主动参与和互动学习。它帮助教师设计和交付有效的课程,并促进学生的学习成果和能力的发展。

  但在其中,我觉得学生间的讨论是比较缺乏的,学生一般会形成几个人的小团体,在团体里进行讨论,但团体间的交流很少;而且一般情况下,能力较强的同学往往喜欢聚在一起,所以各个团体间的水平参差不齐,有的小团体往往能高效的进行讨论,得出有用的结果;而有的小团体却讨论不出什么东西,之前怎么样,现在还能怎么样。所以希望老师可以引导全班同学间,甚至与其他班级同学的讨论,或者安排班委进行引导,如果想学生主动“破窗”是比较困难的,还是得有人在背后推一把。

posted on 2023-06-26 17:05  黔默聆  阅读(8)  评论(0编辑  收藏  举报