Strategy Guide

Exam Tips & Strategy

Knowing Java isn't enough. To score a 5 you need to know how the test is built, how it's scored, and where most students lose points.

๐Ÿ“‹ Exam Format

SectionQuestionsTimeWeight
I ยท Multiple Choice40 questions90 minutes50%
II ยท Free Response4 questions90 minutes50%

Total: 3 hours. Both sections weighted equally. Calculator not permitted. The Java Quick Reference is provided.

๐ŸŽฏ Score Distribution

ScoreMeaningApprox. % Earned
5Extremely well qualified~72%+
4Well qualified~58โ€“71%
3Qualified~42โ€“57%
2Possibly qualified~30โ€“41%
1No recommendation< 30%
๐Ÿ’ก The math

To get a 5 you need roughly 29 of 40 MCQs plus 26 of 36 FRQ points. You don't need to be perfect โ€” you need to be consistent.

๐Ÿ“Š Unit Weights (MCQ Section)

UnitTitleWeight
1Using Objects and Methods15โ€“25%
2Selection and Iteration25โ€“35%
3Class Creation10โ€“18%
4Data Collections30โ€“40%

If you only have time for two units, prioritize Unit 2 and Unit 4 โ€” together they're up to 75% of the multiple-choice section.

๐Ÿšจ Top 10 Traps Most Students Fall Into

  1. Integer division. 7 / 2 is 3, not 3.5. Watch every division operator.
  2. == on Strings. Use .equals() for content comparison. == on objects compares references.
  3. Off-by-one in substring. substring(i, j) is inclusive of i, exclusive of j.
  4. Array/String length confusion. Strings use length() (method). Arrays use length (field, no parens).
  5. Removing while iterating forward. Index shifts cause skipped elements. Iterate backwards or use a careful while-loop.
  6. Mutator forgotten. Strings are immutable. s.toUpperCase() without s = ... changes nothing.
  7. Cast too late. (double)(7/2) is 3.0 (cast after int division). Cast at least one operand before dividing.
  8. Forgetting the boundary in for-loop. i < arr.length not <=. The last valid index is length - 1.
  9. Else-if vs independent ifs. Sequential if statements all run. Use else if for mutually exclusive branches.
  10. Returning from a void method. Use return; (no value). Or just let it fall through.

๐Ÿง  Multiple Choice Strategy

Process of elimination

Cross out 2 wrong answers first. The remaining two are usually a real choice vs. a "trap" choice that has one specific flaw.

Trace tiny cases

When you can't tell what a loop does, plug in arr = {1, 2, 3} and run it by hand. The math takes 30 seconds and you'll be certain.

No penalty for guessing

Wrong answers cost nothing. NEVER leave one blank. Even random guessing gives you 25% on a question you can't solve.

2-minute budget per Q

40 questions in 90 minutes = 2.25 minutes each. If you're stuck past 2 minutes, mark it and move on. Come back if you have time.

โœ๏ธ Free-Response Strategy

  1. Read the entire prompt first. Twice. Underline the method signature exactly as it's given โ€” use that signature.
  2. Use given helpers. If the problem mentions an accessor like getName() or a helper method, USE IT. Re-implementing it costs points.
  3. Compile in your head. Every method needs { }, every line ends with ;, every non-void method returns on every path.
  4. Don't import. The AP assumes java.util.ArrayList and other AP-listed classes are available. Don't write import statements.
  5. Write helper methods. If your method gets long or repeats logic, add a private helper. Graders reward decomposition.
  6. Pseudo-code if stuck. Partial credit for code that captures the idea is better than blank. Write // loop through array, find max... if you must.
  7. Don't erase, cross out. Graders ignore crossed-out code โ€” but they'll grade unmarked code. If you write two attempts, clearly cross out the loser.
  8. Quotes inside strings. Use \" for a literal double-quote: "She said \"hi\"".
  9. Stay on topic. Don't add features the problem didn't ask for. You get zero credit for "improvements" โ€” but you might break a rubric point.
  10. Time = 22 min/FRQ. Use a stopwatch. The hardest FRQ shouldn't burn time you'd spend on the other three.

๐Ÿ“… The Day Before

  • Don't cram. Light review of the Java Quick Reference, then stop. Your brain needs sleep more than another loop.
  • Re-read your own notes on integer division, .equals(), and the for-loop bounds. These are the most common point-losses.
  • Pack early: ID, admission ticket, 2 #2 pencils, blue or black pen, water, snack. Calculator NOT allowed.
  • Sleep 8 hours. Non-negotiable. A tired brain miscounts loop iterations.
  • Eat a real breakfast. Protein + slow carbs. The exam is 3 hours.

๐Ÿ”‘ Algorithms Worth Memorizing

These show up year after year. Be able to write them from scratch.

  • Find max / min in array โ€” running best, single pass
  • Count occurrences โ€” counter + if inside a for-loop
  • Sum and average โ€” running total, cast for division
  • Reverse a String / array โ€” backward loop, build result
  • Check palindrome โ€” two-pointer or reverse-and-compare
  • Count digits / sum digits โ€” n%10 and n/=10
  • Linear search โ€” for-loop, return index or โ€“1
  • Binary search โ€” low, high, mid; sorted required
  • Selection sort โ€” find min, swap to position
  • Insertion sort โ€” shift right, insert at gap
  • Merge sort โ€” divide, recurse, merge
  • 2D row max / min / sum โ€” nested loop, accumulate per row
  • Insert in sorted order โ€” find position, add(i, x)
  • Remove all matching โ€” backward iteration, remove(i)

๐Ÿ“– Java Quick Reference (provided at exam)

These method signatures are provided to you during the exam. You don't need to memorize them perfectly โ€” but know what each does.

String

  • int length()
  • String substring(int from, int to) โ€” to is exclusive
  • String substring(int from)
  • int indexOf(String str)
  • boolean equals(String other)
  • int compareTo(String other)

Math

  • static int abs(int x) & static double abs(double x)
  • static double pow(double base, double exp)
  • static double sqrt(double x)
  • static double random()

Integer / Double

  • Integer.MIN_VALUE, Integer.MAX_VALUE
  • int intValue(), double doubleValue()

ArrayList<E>

  • int size()
  • boolean add(E obj)
  • void add(int index, E obj)
  • E get(int index)
  • E set(int index, E obj)
  • E remove(int index)