在AP CSA考试中,最令各位同学们头疼的莫过于FRQ不会写,FRQ没思路了。除了把基础知识都牢牢掌握以外,对出题规律的把握也尤为重要。如果对FRQ的考试重点不够熟悉,就可能会出现有力使不出的情况,所以今天老师带大家好好把一把出题人的脉。

在前两篇文章中,老师已经带大家学习了读题方法、评分标准、以及Q1和Q2的考点题型,今天我们就继续看看Q3吧~

👉文章指路:

AP CSA FRQ超硬核干货第1弹!带你从刷题无思路到冲刺满分!
AP CSA FRQ超硬核干货第2弹!带你从刷题无思路到冲刺满分!

Q3 Array/ArrayList

第三种题型主要考察数组/数组列表相关知识相关应用题,考察范围为Unit6,Unit7,其中也涉及Unit5 相关内容。

Array相关知识点:

首先Array相关的基本性质要熟练掌握,包括:

1.Array长度固定不可变,创建时长度为几,就固定存储几个元素;
2.Array可存储所有类型(primitive type/reference type),但是同一个Array中只能存储一个固定类型。

以及Array的基本使用规则,包括:

1.Array的两种创建方式(int[] arr = new int[10]; int[] nums = {1,2,3})
2.Array长度(Number of element)的获取:arr.length
3.Array 元素的读取(Access element):arr[i]
4.Array 的遍历(Traversing),for loop/for each loop

ArrayList相关知识点:

ArrayList的基本性质,包括:

1.ArrayList长度可变

2.ArrayList不能存储primitive type,只能存储referenve type(Wapper class:Integer,etc.)

ArrayList 6种相关方法(method)需要熟练掌握:

1.size() method,用于获取长度

2.add(element) method,用于添加元素,直接加到最后

3.add(i,element) method,用于插入到指定位置

4.get(i),access element的固定方式,要和array的access element加以区分

5.set(i,element) 修改第i位的元素

6.remove(i), 删除第i位的元素,后续元素自动向前补齐

两者有很多细节上的区别需要注意,划线部分尤其值得强调,是易混淆点。比如获取长度的区别,Array中是length属性,没有括号;ArrayList中则是size() method, 后面必须跟一个空的括号。还有读取元素,Array用中括号加index;ArrayList必须用get(i) method。

常见算法Common Algorithm

两者也有很多共性得内容,因为都是线性结构,逻辑层面在常见算法的使用中尤为相似。比如常见的1.求和,求平均 2.最大值最小值,3.计数问题 等等。

这些常见的算法需要清晰的掌握其逻辑考试时才能快速的应用于复杂的场景之中。除了这些共通的common algorithm,有一个仅存在于ArrayList场景中的常见算法Remove elements值得单独强调一下,因为考察频率非常之高。

在连续删除一个ArrayList中的某些特定元素的问题时,一定要注意skip element的问题!因为每次删除元素都会影响后续元素的index,所以后面元素自动向前补齐再加上index自动更新,就会导致某些关键元素被跳过。

针对这些常见算法,大家最好要在考前在IDE中独立实现,并设计test case,保证你的算法work as intended。

2022 Q3 ReviewAnalysis a问

考点:Average 求平均

2021 Q3 ClubMembers b问

考点:Remove elements 删除元素

2020 Q3 ReviewCollector b问

考点:Counting 计数问题;Sum 求和问题

2023 Q3 NicknameGenerator b问

考点:String Manipulation 处理字符串

题型分析

题型一:单Class

第一种题型是以一个Class作为基础,要求实现一些线性结构的输出。通常这类题偏算法,需要大家仔细读题看例子以找出其中规律,用一些常见算法来完成array或者ArrayList的构建。

例如:2023年FRQ第三题,一个包含两个String属性(firstName,lastName)的NicknameGenerator Class,其中要写的两个方法就是围绕着这两个instance variable大做文章。生成一系列的小名。在ArrayList的框架基础之下还考察了很多String Manipulation(常见算法)的相关问题。

👉2023 Q3 NicknameGenerator

如果在读题理解题意方面出现了问题,一定要结合example来推理其生成规则。example是辅助大家理解的关键环节。通常一组例子里面的几种不同情况就对应着代码编写是需要用if来分开的不同部分。

👉2023 Q3 NicknameGenerator example

题型二:双Class

这种题型的考察频率在近些年更加频繁。本题型中会出现两个类型,第一个Class先定义一个基本元素,第二个Class中包含一个线性结构,这个线性结构以第一个Class的个体作为基本元素。两个Class之间存在着这种互相配合的思想,也主要考察了大家对于OOP思想的理解,也就是Using Object的能力。尤其是在添加元素的时候,在一个ArrayList中添加新的项,必须要符合之前的类型,绝不能出现“类型不匹配”的情况,这里往往需要用到第一个Class的构造器。还有实践上面分析到的一些常见算法的过程中也要注意遍历到的元素到底是什么类型,如何获取其中的正确信息,这往往需要用到第一个Class的方法。

例如:

👉2021 Q3 ClubMembers

这里MemeberInfo Class就代表着一种基本单位,每个MemeberInfo object都存储着一系列的成员信息。

紧接着,ClubMembers Class就存储了一个许多个MemeberInfo Object组成的ArrayList。后续的问题都是围绕着这个线性结构来展开。

采分点分析

1.遍历TraversingUsing Object为固定考点,如何正确读取调用每种线性结构的元素是大家必须掌握的基本功。遍历的同时注意类型,该类型可使用的方法。


2.前面题型强调过的Helper Method的使用依然是必考点,此处归类于Using Object中。

3.难点一般在于常见算法的进阶内容,需要大家有一定的读题能力和变通的经验。

本文作者

TD福利

TD教研组老师精心为大家总结了一份针对四种FRQ题型考点解剖的备考资料——「AP CSA FRQ通用代码秘籍」

封面预览

有需要的小伙伴只需添加下方小马甲微信,并回复暗号「CSA秘籍」,即可免费get!

推荐阅读