2022年5月4日进行的APCSA考试已经结束。本场考试为线下纸笔考试,这篇文章涉及到的考卷为国内卷,希望能够通过对应的考情回顾与分析,帮助大家做难度参考。
整体分析
今年题目的难度中等偏上。选择题难度与往年相差不大,考察的题型比较相似。简答题的难度大于往年,前3题难度适中,第四题比较复杂。
主要原因在于往年的简答题一般只会涉及到1至2个class,2个class的题目往往是同学们平时易错的地方。而第4题则包含了3个class,难度上升,需要考生完全理解这3个class之间的关系与逻辑,才能对题目进行作答。
选择题分析
今年的选择题考察内容与往年类似,高频考点依然是:
循环:包括for、while或for-each循环,涉及Nested Loop和循环遍历数组的用法;
数组:包括Array、ArrayList和2D Array,主要考察数组遍历和常见算法。
继承:主要考察对继承与Polymorphism等的理解与使用。
除此之外,部分题目涉及到了IndexOutOfBounds的考察,意在检测同学们对于String或Array index的理解,在平时学习过程中,同学们要牢牢记住程序中的index从0开始,并且熟练掌握String和Array相关操作的参数范围、循环的边界值等等。
少量题目考察了数据类型转换,要求考生对int和double类型之间的转换足够熟悉。有几道考题涉及了传参问题,即对形参的修改是否能影响到实参的值。
这种题目需要分类讨论,如果实参是Primitive type,那么对形参的任何修改不会影响到实参。而如果传递Reference type, 那么修改形参的状态会影响实参,但是如果将形参直接替代为新的object,则不会影响到实参的值。
简答题分析
整体难度中等偏上,前3题难度适中,第4题较为复杂。
第一题
本题考察:Methods and Control Structure。
(a)小题要求生成10 20 30 40 50中的随机数字并返回。这道题需要用到Math.random()方法,注意Math.random()方法生成的是[0,1)之间的随机小数,区间左闭右开,不包括1。最终的结果需要强制转换成int才能进行返回。
(b)小题要求计算成绩的平均分,并且给出了最低得分的限制,只需要按照题目要求作答即可。
第二题
本题考察:编写class。
题目要求编写一个完整的Class: TopSecretWord。其中一个方法要求根据word长度的奇偶性对word进行转换,另外一个方法需要按照题目规则比较word的长度。需要注意public和private的使用以及String相关操作的语法。
第三题
本题考察:对ArrayList的理解与使用。
(a)题要求从数组中找出前一位数字比下一位大的几组数,并且存储到成ArrayList中进行返回,例如:当数组的元素为[1, 2, 3, 2]时, 符合要求的一组数是[3, 2],因为前一位的数字3大于后一位的2,其余的几组数[1, 2], [2, 3]不符合要求。
(b)题需要调用a题的方法和class中的其他方法,要求查找符合题目规则的次数最多的数字。
第四题
本题考察:对2D Array的理解与使用。
本题涉及到了3个不同的class,分别用来表示宝藏图中的不同信息。
(a)题要求根据相关规则需要构造宝藏图。
(b)题要求在给定的两点围成的方形区间中算出宝藏里金块的数量。 往年的题目一般涉及到1至2个class,由于本题class的数量比较多,导致这道题与前3道相比,稍显复杂。解这道题的关键在于理解3个class之间关系,之后按照题目规则进行作答即可。