
在AP CSA考試中,最令各位同學們頭疼的莫過於FRQ不會寫,FRQ沒思路了。除了把基礎知識都牢牢掌握以外,對出題規律的把握也尤為重要。如果對FRQ的考試重點不夠熟悉,就可能會出現有力使不出的情況,所以今天老師帶大家好好把一把出題人的脈。
在前兩篇文章中,老師已經帶大家學習了讀題方法、評分標準、以及Q1和Q2的考點題型,今天我們就繼續看看Q3吧~
👉文章指路:
Q3 Array/ArrayList
第三種題型主要考察陣列/陣列列表相關知識相關應用題,考察範圍為Unit6,Unit7,其中也涉及Unit5 相關內容。
首先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的基本性質,包括:
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。

考點:Average 求平均

考點:Remove elements 刪除元素

考點:Counting 計數問題;Sum 求和問題

考點:String Manipulation 處理字串
題型分析
第一種題型是以一個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之間存在著這種互相配合的思想,也主要考察了大家對於OOP思想的理解,也就是Using Object的能力。尤其是在新增元素的時候,在一個ArrayList中新增新的項,必須要符合之前的型別,絕不能出現“型別不匹配”的情況,這裡往往需要用到第一個Class的構造器。還有實踐上面分析到的一些常見演算法的過程中也要注意遍歷到的元素到底是什麼型別,如何獲取其中的正確資訊,這往往需要用到第一個Class的方法。
例如:
👉2021 Q3 ClubMembers

這裡MemeberInfo Class就代表著一種基本單位,每個MemeberInfo object都儲存著一系列的成員資訊。

緊接著,ClubMembers Class就儲存了一個許多個MemeberInfo Object組成的ArrayList。後續的問題都是圍繞著這個線性結構來展開。
採分點分析

1.遍歷Traversing和Using Object為固定考點,如何正確讀取和呼叫每種線性結構的元素是大家必須掌握的基本功。遍歷的同時注意型別,該型別可使用的方法。
2.前面題型強調過的Helper Method的使用依然是必考點,此處歸類於Using Object中。
3.難點一般在於常見演算法的進階內容,需要大家有一定的讀題能力和變通的經驗。
本文作者

TD福利
TD教研組老師精心為大家總結了一份針對四種FRQ題型考點解剖的備考資料——「AP CSA FRQ通用程式碼秘籍」!

封面預覽
有需要的小夥伴只需新增下方小馬甲微信,並回復暗號「CSA秘籍」,即可免費get!
