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