AP CSA FRQ Strategies: How to Earn Maximum Points
The free-response section of the AP Computer Science A exam is worth 50% of your total score. It consists of four questions that require you to write Java code by hand. While the FRQ section can be intimidating, there are predictable patterns and proven strategies that can help you earn maximum points. In this post, we will break down the structure of the FRQ section, explain what graders are looking for, and provide specific strategies for each question type.
Understanding the FRQ Format
The FRQ section has four questions, each worth 9 points, for a total of 36 points. You have 90 minutes to complete all four questions, which gives you approximately 22 minutes per question. Each question has multiple parts (labeled a, b, c, etc.), and each part is worth a specific number of points. You do not need to answer all parts correctly to earn partial credit.
The four FRQs follow a predictable pattern. Question 1 always focuses on methods and control structures. Question 2 asks you to design a complete class. Question 3 involves arrays or ArrayLists. Question 4 deals with 2D arrays. Knowing this pattern helps you allocate your time wisely during the exam.
Question 1: Methods and Control Structures
Question 1 tests your ability to write methods that use control structures (if statements and loops) to solve a specific problem. The problem is usually straightforward, and the solution typically involves a loop with a conditional inside it. The key to earning full credit is writing correct, clean code and handling all edge cases.
Read the problem carefully and identify the input, output, and any constraints. Write pseudocode before writing Java code. This helps you organize your thoughts and avoid mistakes. Test your solution mentally with a small example before writing the final version. Common mistakes include off-by-one errors, incorrect loop conditions, and forgetting to handle edge cases.
Question 2: Class Design
Question 2 asks you to write a complete class, including instance variables, a constructor, and methods. This is the question that most directly tests your understanding of object-oriented programming. You need to demonstrate that you understand encapsulation, constructors, and accessor/mutator methods.
Start by identifying the instance variables needed. Use private access modifiers for all instance variables. Write a constructor that initializes all instance variables. Write accessor methods (getters) and mutator methods (setters) as needed. If the problem asks for a specific method, make sure your method signature matches exactly. Include comments explaining your design decisions.
Question 3: Arrays and ArrayLists
Question 3 always involves processing a 1D array or ArrayList. Common operations include searching for elements, counting occurrences, modifying elements, and creating new arrays. The solution almost always involves a loop that traverses the array and performs some operation on each element.
Be careful about array indexing. Remember that array indices start at 0 and end at length-1. Do not use an index that is out of bounds. When creating a new array, make sure it is the correct size. When modifying elements, make sure you are modifying the correct element. Trace through your solution with a small example to verify it works correctly.
Question 4: 2D Arrays
Question 4 always involves processing a 2D array. Common operations include traversing the array, finding specific elements, computing row or column sums, and modifying elements. The solution typically involves nested loops, with the outer loop iterating over rows and the inner loop iterating over columns.
Remember that matrix.length gives the number of rows and matrix[i].length gives the number of columns in row i. For jagged arrays, the number of columns may vary by row. Be careful about boundary conditions: do not access matrix[-1][0] or matrix[matrix.length][0]. Trace through your solution with a small example to verify it works correctly.
General FRQ Strategies
Read the entire question before you start writing. Understand what is being asked before you begin coding. Write your code clearly and legibly. The graders are reading hundreds of exams; if they cannot read your code, they cannot give you credit. Use meaningful variable names and add comments where helpful.
Do not leave any question blank. Even if you cannot solve the entire problem, write down your approach, implement the parts you can, and show your work. Partial credit is awarded for correct code segments, even if the overall solution is incomplete. A method signature with the correct return type and parameters may earn a point even if the body is incorrect.
Practice with past FRQs. The College Board publishes free-response questions from previous years on their website. Work through as many as you can, under timed conditions. Review the scoring guidelines to understand how points are awarded. This practice is the single best way to prepare for the FRQ section.