Practice MC
Practice FRQ
1a
public static int hailstoneLength(int n) {
int count = 1;
while (n != 1) {
if (n % 2 == 0) {
n = n / 2;
} else {
n = 3 * n + 1;
}
count++;
}
return count;
}
1b
public static boolean isLongSeq(int n) {
return hailstoneLength(n) > n;
}
1c
public static double propLong(int n) {
int countLong = 0;
for (int i = 1; i <= n; i++) {
if (isLongSeq(i)) {
countLong++;
}
}
return (double) countLong / n;
}
2
import java.util.Random;
public class GameSpinner {
private int sectors;
private int currentRun;
private int lastSpin;
private Random random;
public GameSpinner(int sectors) {
this.sectors = sectors;
this.currentRun = 0;
this.lastSpin = -1;
this.random = new Random();
}
public int spin() {
int spinResult = random.nextInt(sectors) + 1;
if (spinResult == lastSpin) {
currentRun++;
} else {
currentRun = 1;
}
lastSpin = spinResult;
return spinResult;
}
public int currentRun() {
return currentRun;
}
}
3a
public void addReview(ProductReview prodReview) {
reviewList.add(prodReview);
String productName = prodReview.getName();
if (!productList.contains(productName)) {
productList.add(productName);
}
}
3b
public int getNumGoodReviews(String prodName) {
int goodReviewCount = 0;
for (ProductReview review : reviewList) {
if (review.getName().equals(prodName) && review.getReview().contains("best")) {
goodReviewCount++;
}
}
return goodReviewCount;
}
4a
public Theater(int seatsPerRow, int tier1Rows, int tier2Rows) {
int totalRows = tier1Rows + tier2Rows;
theaterSeats = new Seat[totalRows][seatsPerRow];
for (int row = 0; row < totalRows; row++) {
int tier;
if (row < tier1Rows) {
tier = 1;
} else {
tier = 2;
}
for (int col = 0; col < seatsPerRow; col++) {
theaterSeats[row][col] = new Seat(true, tier);
}
}
}
4b
public boolean reassignSeat(int fromRow, int fromCol, int toRow, int toCol) {
Seat fromSeat = theaterSeats[fromRow][fromCol];
Seat toSeat = theaterSeats[toRow][toCol];
if (!toSeat.isAvailable()) {
return false;
}
if (toSeat.getTier() < fromSeat.getTier()) {
return false;
}
toSeat.setAvailability(false);
fromSeat.setAvailability(true);
return true;
}
How I’ve prepared and am preparing for the exam
- Practice MCQs
- Practice FRQs
- Watching collegeboard videos, doing practice questions
- Solving questions from the AP CSA book
Further Plans to prepare:
- Reviewing past exam questions and solutions.
- Practicing time management.
- Revisiting the challenging topics with CollegeBoard videos.
- Revising 1 or 2 units per day by watching CollegeBoard videos and solving problems (MCQs and FRQs)
- Taking mock exams to assess readiness and identify weak areas.
Commonly Tested Topics on AP CSA Exam MCQs
- Object-Oriented Programming Concepts
- Understanding classes, objects, inheritance, and polymorphism.
- Identifying appropriate use of encapsulation and abstraction.
- Control Structures
- Proficiency with
if
,else
,switch
,for
,while
, anddo-while
loops. - Logical reasoning and debugging code snippets.
- Proficiency with
- Data Structures
- Working with arrays, ArrayLists, and 2D arrays.
- Traversing, modifying, and analyzing data structures.
- Methods and Parameters
- Writing and understanding methods with parameters and return values.
- Overloading and recursion.
- AP Java Subset
- Familiarity with the specific Java classes and methods allowed on the exam.
- Commonly tested classes include
String
,Math
, andArrayList
.
- Algorithm Development
- Problem-solving with searching and sorting algorithms.
- Analyzing time and space complexity.
- Code Analysis
- Identifying errors, predicting output, and understanding code behavior.
- Reading and interpreting code snippets effectively.
Four Types of FRQs on the AP Computer Science A Exam
- Methods and Control Structures
- Write methods that use
if-else
statements for decision-making. - Implement loops (
for
,while
) for iteration and repetition. - Use logical operators (
&&
,||
,!
) to form complex conditions. - Handle edge cases and validate input within methods.
- Understand method overloading and recursion for problem-solving.
- Write methods that use
- Writing Classes
- Define fields with appropriate access modifiers (
private
,public
). - Write constructors to initialize objects with default or specific values.
- Implement getter and setter methods for encapsulation.
- Use inheritance to extend functionality of existing classes.
- Override methods to provide specific behavior in subclasses.
- Define fields with appropriate access modifiers (
- Array/ArrayList
- Traverse arrays or ArrayLists using loops.
- Add, remove, or update elements in an ArrayList.
- Search for specific elements using linear or binary search.
- Sort arrays or ArrayLists using built-in methods or custom logic.
- Handle out-of-bounds errors and ensure proper indexing.
- 2D Array
- Access elements using nested loops for row and column traversal.
- Perform operations like summing rows, columns, or diagonals.
- Search for specific values within a 2D array.
- Modify elements based on conditions or patterns.
- Understand memory layout and indexing of 2D arrays.