AP CSA FRQ HWs
2022 FRQ - Question 3
// CODE_RUNNER: Part A
public double getAverageRating() {
if (allReviews.size() == 0) {
return 0.0;
}
int total = 0;
for (Review r : allReviews) {
total += r.getRating();
}
return (double) total / allReviews.size();
}
// CODE_RUNNER: Part B
public ArrayList<String> collectComments() {
ArrayList<String> result = new ArrayList<>();
for (int i = 0; i < allReviews.size(); i++) {
String comment = allReviews.get(i).getComment();
if (comment.contains("!")) {
String formatted = i + "-" + comment;
// Check last character
if (!(comment.endsWith("!") || comment.endsWith("."))) {
formatted += ".";
}
result.add(formatted);
}
}
return result;
}
2017 FRQ - Question 1
// CODE_RUNNER: Part A
public Digits(int num) {
digitList = new ArrayList<Integer>();
// Special case when num is 0
if (num == 0) {
digitList.add(0);
return;
}
// Store digits in reverse order first
while (num > 0) {
digitList.add(0, num % 10); // insert at front
num /= 10;
}
}
// CODE_RUNNER: Part B
public boolean isStrictlyIncreasing() {
for (int i = 1; i < digitList.size(); i++) {
if (digitList.get(i) <= digitList.get(i - 1)) {
return false;
}
}
return true;
}
2024 FRQ - Question 3
// CODE_RUNNER: Part A
public boolean isWordChain() {
for (int i = 1; i < wordList.size(); i++) {
String prev = wordList.get(i - 1);
String curr = wordList.get(i);
if (!curr.contains(prev)) {
return false;
}
}
return true;
}
// CODE_RUNNER: Part B
public ArrayList<String> createList(String target) {
ArrayList<String> result = new ArrayList<>();
for (String word : wordList) {
if (word.startsWith(target)) {
result.add(word.substring(target.length()));
}
}
return result;
}
2017 FRQ - Question 4
// CODE_RUNNER: Part A
public static Position findPosition(int value, int[][] arr) {
for (int r = 0; r < arr.length; r++) {
for (int c = 0; c < arr[0].length; c++) {
if (arr[r][c] == value) {
return new Position(r, c);
}
}
}
return null;
}
// CODE_RUNNER: Part B
public static Position[][] getSuccessorArray(int[][] arr) {
Position[][] result = new Position[arr.length][arr[0].length];
for (int r = 0; r < arr.length; r++) {
for (int c = 0; c < arr[0].length; c++) {
int current = arr[r][c];
result[r][c] = findPosition(current + 1, arr);
}
}
return result;
}
FRQ Skills Reflection Table
| Topic / Method | What It Tests | Key Skills Needed | Common Mistakes |
|---|---|---|---|
| getAverageRating | ArrayList traversal + math | Looping, summing, casting to double | Integer division, forgetting empty case |
| collectComments | String processing + ArrayList | contains, endsWith, formatting strings |
Forgetting to add period, wrong filtering |
| Digits Constructor | Number → digits (ArrayList) | %, /, inserting at front |
Reversed order, missing num == 0 case |
| isStrictlyIncreasing | Sequential comparison | Loop with index, comparing neighbors | Using < instead of <=, off-by-one errors |
| isWordChain | String relationships | contains, comparing adjacent elements |
Comparing wrong indices, skipping first pair |
| createList | Filtering + substring | startsWith, substring |
Wrong substring index, modifying order |
| findPosition | 2D array search | Nested loops, returning objects | Swapping row/col, not returning null |
| getSuccessorArray | 2D array + method reuse | Calling helper methods, mapping values | Not matching dimensions, not handling null |