2016 AP CSA Free Response Questions | All Solutions & Scoring
2016 AP CSA Free Response Questions
Classic Exam (Pre-2019 Format): Pre-2019 classic format. FRQ 1 part (b) used subclass inheritance (extends/super()), which is no longer tested. Skip the subclass part of FRQ 1; the base class and FRQs 2–4 are all applicable to today’s exam.
Complete Java solutions, scoring rubrics, common mistakes, and exam tips for every 2016 AP CSA FRQ. All question text verified from the official College Board PDF.
The 2016 AP CSA FRQs
The 2016 exam used the classic multi-type FRQ format from before the 2019 standardization. These questions are excellent for building deep Java fundamentals even though some specific topics (such as interfaces with extends, GridWorld) no longer appear on the current exam.
RandomStringChooser
Write the complete RandomStringChooser class (uses an ArrayList to track available strings, removes one randomly with getNext(), returns NONE when empty), then extend it in RandomLetterChooser subclass.
SystemLog
Implement the LogMessage class and SystemLog class: parse log strings, store them in an ArrayList, and retrieve messages by level using removeEarlierThan() and getLastHackerMessages().
Crossword
Write the Crossword class that fills a 2D char array grid with a word horizontally and vertically, checks if a word fits without conflicts, and places it into the grid.
StringFormatter
Format a list of words into a string of a given total length by distributing spaces evenly between words, with leftmost gaps receiving extra spaces when the total does not divide evenly.
Quick Reference: All Four 2016 FRQs
| FRQ | Problem | Type | Difficulty | Key Skill |
|---|---|---|---|---|
| FRQ 1 | RandomStringChooser | Class | Medium | ArrayList removal by index, NONE sentinel, subclass constructor |
| FRQ 2 | SystemLog | ArrayList | Medium-Hard | Backward traversal for removal, String parsing, level filtering |
| FRQ 3 | Crossword | 2D Array | Hard | Row vs column placement, char conflict detection in 2D grid |
| FRQ 4 | StringFormatter | String | Hard | Uneven space distribution: divide total gaps, distribute remainder left-to-right |
How Hard Were the 2016 AP CSA FRQs?
Overall: hard. The 2016 exam was widely considered one of the more challenging years of the classic era. FRQ 1 required writing a complete class plus a subclass. FRQ 2 involved ArrayList filtering with backward traversal. FRQ 3 demanded 2D grid char conflict detection. FRQ 4 required precise space distribution math.
Students who ran out of time often left FRQ 3 or FRQ 4 partially complete. The base-class portion of FRQ 1 was accessible, but the subclass extension (using super()) was only relevant to students comfortable with inheritance, which is no longer tested on the current exam.
FRQ 1: RandomStringChooser — Medium
Built an ArrayList from a String array; getNext() selected a random index, removed that element, and returned it (NONE when empty). Part (b) extended it with a subclass using super() — this pattern is no longer on the exam. The base class implementation is still excellent practice.
FRQ 2: SystemLog — Medium-Hard
LogMessage stored parsed fields. SystemLog maintained an ArrayList and supported removeEarlierThan() (backward traversal removal) and getLastHackerMessages() (filtered retrieval). Backward traversal was essential for safe removal; forward traversal caused index-shift errors.
FRQ 3: Crossword — Hard
Place words into a 2D char grid horizontally and vertically. canPlaceWordAt() checked each cell for conflicts (blank or same char). placeWord() filled cells. The main trap: not checking bounds before accessing grid cells, and confusing row-indexing with column-indexing.
FRQ 4: StringFormatter — Hard
Distribute spaces evenly across gaps between words. Base spaces per gap = total / (n-1); extra spaces = total % (n-1), assigned left-to-right. Students who skipped the remainder calculation or distributed extra spaces incorrectly lost multiple rubric points.
Classic vs. Current Exam Format
Beginning with the 2019 exam, College Board standardized the AP CSA FRQ format to four consistent question types in the same order every year (Methods, Class Writing, ArrayList, 2D Array). The 2016 exam pre-dates this standardization, meaning question types varied more widely. Key differences from the current exam:
What Still Applies Today
All core Java skills are directly transferable: loops, conditionals, arrays, ArrayList, String methods, class design, 2D array traversal. The algorithmic patterns from 2016 appear on every modern exam.
What No Longer Appears
Interfaces with implements/extends, inheritance hierarchies, super() calls, and (in 2014) the GridWorld case study have all been removed from the AP CSA curriculum. Skip those parts when studying from this year.
How to Use This Page
For best results: attempt each FRQ yourself first (set a 22-minute timer), then check the solution page. Focus on the algorithmic core — loop patterns, array traversal, class structure — and skip any parts involving inheritance or interfaces, as these are no longer tested on current exams.
- Click any FRQ card above to open the full solution page (some solutions are still being built — check the official PDF linked above for full question text).
- Use the FRQs by Topic page to find more practice on any specific concept.
- See all years at the FRQ Archive.
Frequently Asked Questions About the 2016 AP CSA FRQs
What are the 2016 AP CSA FRQs?
FRQ 1 RandomStringChooser (Class with ArrayList + subclass), FRQ 2 SystemLog (ArrayList filtering), FRQ 3 Crossword (2D Array placement), FRQ 4 StringFormatter (String space distribution). Each worth 9 points for 36 total, 50% of the exam score.
Does FRQ 1 RandomStringChooser apply to the current exam?
Mostly yes. The core skills (ArrayList with random removal, NONE sentinel, class construction) are directly relevant. The subclass part (RandomLetterChooser extends RandomStringChooser) used inheritance with super(), which is no longer tested on current exams. Focus on the base class implementation for current exam prep.
Which 2016 FRQ was the hardest?
FRQ 3 Crossword and FRQ 4 StringFormatter were both hard. Crossword required detecting char conflicts in a 2D grid for both horizontal and vertical placement. StringFormatter required distributing uneven spaces using integer division and modular arithmetic — a precision-heavy computation under time pressure.
What is the trick in 2016 FRQ 4 StringFormatter?
Total gaps between n words equals n-1. Divide total spaces by gaps to get the base gap size; the remainder tells you how many gaps get an extra space. Assign the extra space to the leftmost gaps first. Students who tried to handle this with a uniform gap formula missed the remainder distribution.
Get in Touch
Whether you're a student, parent, or teacher — I'd love to hear from you.
Just want free AP CS resources?
Enter your email below and check the subscribe box — no message needed. Students get daily practice questions and study tips. Teachers get curriculum resources and teaching strategies.
Message Sent!
Thanks for reaching out. I'll get back to you within 24 hours.
Prefer email? Reach me directly at [email protected]